#!/bin/sh # # [email protected] # #命令格式: #./split filename N dest_path do_help() { echo "syntax:" echo "split <orig_file> <split_num> <dest_path>" } orig_file=$1 split_num=${2:-2} dest_path=${3:-.} if ! ( [ -f "$orig_file" ] && [ -r "$orig_file" ] && [ -s "$orig_file" ] ); then echo "file $orig_file is invalid." do_help exit 1 fi if ! [ $split_num -gt 1 ]; then echo "split_num is invalid." do_help exit 1 fi if ! ( [ -d $dest_path ] && [ -x $dest_path ] );then echo "dest_path is invalid." do_help exit 1 fi size=$(ls -l $orig_file | awk '{print $5}') split_size_avr=$(($size/$split_num)) bs=1 if [ $size -gt $((1024*1024)) ]; then bs=1024 split_size_avr=$(($split_size_avr/1024)) fi for i in $(seq $split_num);do if [ $i -eq 1 ]; then dd if=$orig_file of=$dest_path/${orig_file}.$i bs=$bs count=$split_size_avr elif [ $i -eq $split_num ];then dd if=$orig_file of=$dest_path/${orig_file}.$i bs=$bs skip=$(($split_size_avr*$(($i-1)))) count=$(( $size - $(($split_size_avr*$(($i-1)))) )) else dd if=$orig_file of=$dest_path/${orig_file}.$i bs=$bs skip=$(($split_size_avr*$(($i-1)))) count=$split_size_avr fi done