代码:
#!/bin/sh
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
命令格式: ./split filename N dest_path
合并N个小文件为一个大文件:
代码: cat $(ls |grep -E 'filename\.') > filename
|