123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- function ts() {
-
- ts=$(date)
- echo $(date )
- }
- usage () {
- echo "Usage: $0 -s - source, -d destination, -n note";
- exit 1;
- }
- while getopts s:d:n: flag
- do
- case "${flag}" in
- s) src=${OPTARG};;
- d) dst=${OPTARG};;
- n) note=${OPTARG};;
- ?) usage;;
- esac
- done
- if [ -z ${src} ]; then
- read -p "[ $(ts) ]: Source [$(pwd)]: " src
- if [ -z ${src} ]; then
- src="$(pwd)"
- fi
- fi
- if [ -z ${dst} ]; then
- read -p "[ $(ts) ]: Destination [$(pwd)]: " dst
- if [ -z ${dst} ]; then
- dst="$(pwd)"
- fi
- fi
- if [ -z ${note} ]; then
- read -p "[ $(ts) ]: Note of session/event: " note
- if [ -z ${note} ]; then
- note=""
- else
-
- note=" - ${note}"
- fi
- fi
- if [ ${src} = ${dst} ]; then
- echo "[ $(ts) ]: Source and destination are the same, exiting..."
- exit 2
- fi
- echo "[ $(ts) ]: ----- [ Transfer details ] ---------------------------------------------"
- if [ -d "$src" ]; then
-
- files_src_total_amount=0
- files_src_total_size=0
- for file in "$src"/*; do
- file_size="$( stat -f %z "$file" )"
-
- files_src_total_size=$(( $files_src_total_size+$file_size ))
- files_src_total_amount=$(( $files_src_total_amount+1 ))
- done
- echo "[ $(ts) ]: Source: [${src}]"
- echo "[ $(ts) ]: Total of $files_src_total_amount src files, total size is $(( $files_src_total_size/1024/1024 )) MB)."
- else
- echo "[ $(ts) ]: src dir does not exist, exiting..."
- exit 2
- fi
- echo "[ $(ts) ]: Destination: [${dst}]"
- echo "[ $(ts) ]: Note: [${note}]"
- read -p "[ $(ts) ]: Confirm (Y): " confirm
- if [ ${confirm} = "Y" ]; then
- echo "[ $(ts) ]: Preparing to transfer..."
-
- if ! [ -d "$dst" ]; then
- read -p "[ $(ts) ]: dst dir does not exist, do you want to create?" confirm
- if [ ${confirm} = "Y" ]; then
- mkdir -v -p -m 700 "$dst"
- echo "[ $(ts) ]: dst dir created."
- fi
- fi
- files_copied_filename=()
- files_copied_total_size=0
- files_error_filename=()
-
- for file in "$src"/*; do
- echo "[ $(ts) ]: src dir: ["$src"]"
- filename="$(basename "$file")"
-
- file_mdate="$( stat -f %Sm -t %Y-%m-%d "$file" )"
- file_size="$( stat -f %z "$file" )"
-
- if [ ${note} = "" ]; then
- dst_subdir="${file_mdate}"
- else
- dst_subdir="${file_mdate}${note}"
- fi
-
- mkdir -p "$dst"/"$dst_subdir"
- echo "[ $(ts) ]: src file : [${filename}], modification date is: ${file_mdate}, ( $(( ${file_size}/1024/1024 )) MB )"
-
-
- src_hash=$( shasum -a 256 "$file" | cut -d ' ' -f 1)
-
- echo "[ $(ts) ]: dst subdir: ["$dst"/"$dst_subdir"]"
-
- echo "[ $(ts) ] copying.."
- cp "$file" "$dst"/"$dst_subdir"
-
- dst_hash=$( shasum -a 256 "${dst}/"$dst_subdir"/${filename}" | cut -d ' ' -f 1)
-
-
- if [ ${src_hash} = ${dst_hash} ]; then
-
- files_copied_filename+=("$filename")
- files_copied_total_size+=$file_size
-
- echo "[ $(ts) ]: src and dst hashes are the same, removing src file"
- rm "${file}"
- else
- echo "[ $(ts) ]: src and dst hashes are different."
- files_error_filename+=("$file")
- fi
-
-
-
-
- done
-
-
-
-
-
-
-
-
-
-
-
- else
-
- echo "[ $(ts) ]: Operation is not confirmed."
- exit 1
- fi
|