X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Ffiles%2Fcompare_dirs.sh;h=6c700d8f20a31e508b383295a416eb0d1ef812be;hb=14cfed0371a6604dfb59c0ebac8418d32e729297;hp=4469b1281ea5a92ec0827846121dcbf676ebd400;hpb=6ceee57766ac799a57a50e6293901eb133894c79;p=feisty_meow.git diff --git a/scripts/files/compare_dirs.sh b/scripts/files/compare_dirs.sh index 4469b128..6c700d8f 100644 --- a/scripts/files/compare_dirs.sh +++ b/scripts/files/compare_dirs.sh @@ -1,5 +1,7 @@ #!/bin/bash +# compares the files and directory names in two different top-level directories +# and prints a report of the differences. dir1="$1"; shift dir2="$1"; shift @@ -9,27 +11,65 @@ if [ -z "$dir1" -o -z "$dir2" ]; then echo list of differences in the two directory hierarchies. exit 1 fi -if [ ! -d "$dir1/" -o ! -d "$dir2/" ]; then - echo The directories to be compared must already exist. +#if [ ! -d "$dir1/" -o ! -d "$dir2/" ]; then +# echo The directories to be compared must already exist. +# exit 1 +#fi +if [ "$dir1" == "$dir2" ]; then + echo "The two directories are the exact same folder name. So that's silly." exit 1 fi out1="$(mktemp "$TMP/compare_dirs_output.XXXXXX")" out2="$(mktemp "$TMP/compare_dirs_output.XXXXXX")" -pushd "$dir1" &>/dev/null -#find . -type d >"$out1" -find . >"$out1" + +#hmmm: need error checking in here!!!! + + +# host processing on first dir. +if [[ $dir1 == *":"* ]]; then + host1=${dir1%:*} + dir1=${dir1#*:} +#echo "got host1 as $host1 and new dir1 as $dir1" +fi + +# host processing on second dir. +if [[ $dir2 == *":"* ]]; then + host2=${dir2%:*} + dir2=${dir2#*:} +#echo "got host2 as $host2 and new dir2 as $dir2" +fi + +if [ -z "$host1" ]; then + # fully local compare location for first dir. + pushd "$dir1" &>/dev/null + find . >"$out1" + popd &>/dev/null +else + # remote compare location for first dir. + ssh "$host1" "cd \"$dir1\" && find ." >"$out1" +fi + +# sort the output from listing the first directory. sort "$out1" >"$out1".sort -popd &>/dev/null -pushd "$dir2" &>/dev/null -#find . -type d >"$out2" -find . >"$out2" +if [ -z "$host2" ]; then + # fully local compare location for second dir. + pushd "$dir2" &>/dev/null + find . >"$out2" + popd &>/dev/null +else + # remote compare location for second dir. + ssh "$host2" "cd \"$dir2\" && find ." >"$out2" +fi + +# sort the output from listing the second directory. sort "$out2" >"$out2".sort -popd &>/dev/null +# compare the two sorted output files to show the missing files on each side. diff "$out1".sort "$out2".sort +# clean up our output files. rm "$out1" "$out1".sort "$out2" "$out2".sort