| #!/bin/bash |
| |
| |
| function process_join() { |
| local intput0=$1 |
| local size0=$2 |
| local intput1=$3 |
| local size1=$4 |
| local output=$5 |
| local temp_output=${output}.temp |
| local temp_size=`expr ${size0} + ${size1}` |
| |
| #cat ${intput0} > ${intput0}.orig |
| #cat ${intput1} > ${intput1}.orig |
| dd if=/dev/zero of=${temp_output} bs=1 count=${temp_size} |
| input_size=`stat -c %s ${intput0}` |
| if [ $input_size -gt ${size0} ]; then |
| dd if=${intput0} of=${temp_output} bs=1 count=${size0} |
| else |
| dd if=${intput0} of=${temp_output} bs=1 conv=notrunc |
| fi |
| input_size=`stat -c %s ${intput1}` |
| if [ $input_size -gt ${size1} ]; then |
| dd if=${intput1} of=${temp_output} seek=${size0} bs=1 count=${size1} |
| else |
| dd if=${intput1} of=${temp_output} seek=${size0} bs=1 conv=notrunc |
| fi |
| cat ${temp_output} > ${output} |
| rm -rf ${temp_output} |
| merge_size=`stat -c %s ${output}` |
| if [ ${merge_size} -ne ${temp_size} ]; then |
| echo "$output file size is not equal $temp_size, ${merge_size}" |
| echo -1 |
| fi |
| return |
| } |
| |
| function generate_joining() { |
| local argv=("$@") |
| local i=0 |
| |
| # Parse args |
| while [ $i -lt $# ]; do |
| arg="${argv[$i]}" |
| #echo "i=$i argv[$i]=${argv[$i]}" |
| i=$((i + 1)) |
| case "$arg" in |
| --input0) |
| input0="${argv[$i]}" ;; |
| --size0) |
| size0="${argv[$i]}" ;; |
| --input1) |
| input1="${argv[$i]}" ;; |
| --size1) |
| size1="${argv[$i]}" ;; |
| --output) |
| output="${argv[$i]}" ;; |
| esac |
| i=$((i + 1)) |
| done |
| |
| if [ -z ${input0} ] || [ ! -f ${input0} ] || [ -z ${size0} ]; then |
| return |
| fi |
| if [ -z ${input1} ] || [ ! -f ${input1} ] || [ -z ${size1} ]; then |
| return |
| fi |
| if [ -z ${output} ]; then |
| return |
| fi |
| echo "$BASH_SOURCE, $LINENO" |
| process_join ${input0} ${size0} ${input1} ${size1} ${output} |
| echo "$BASH_SOURCE, $LINENO" |
| return |
| } |
| |
| generate_joining $@ |