Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. print_usage() {
  4. printf "Usage: ./comparer.sh [-d] PATTERN FIRST_DIR SECOND_DIR\n"
  5. printf "Compares all files (recursively) found that match the PATTERN in FIRST_DIR to files found in SECOND_DIR.\n"
  6. printf "If the files differ and -d is used you are offered to view the diff.\n"
  7. }
  8.  
  9. declare -A filesFromFirstDir
  10. declare -A filesFromSecondDir
  11.  
  12. diff=0
  13. while getopts 'dh' flag; do
  14. case "${flag}" in
  15. d) diff=1;;
  16. h) print_usage; exit 0;;
  17. esac
  18. done
  19.  
  20. if [ $diff -eq 1 ]; then
  21. shift "$((OPTIND - 1))"
  22. fi
  23.  
  24. for filepath in $(find $2 -name "$1"); do
  25. filename=$(echo $filepath | rev | cut -d/ -f1 | rev)
  26. filesFromFirstDir[$filename]=$filepath
  27. done
  28.  
  29. for filepath in $(find $3 -name "$1"); do
  30. filename=$(echo $filepath | rev | cut -d/ -f1 | rev)
  31. filesFromSecondDir[$filename]=$filepath
  32. done
  33.  
  34. for filename in ${!filesFromFirstDir[@]}; do
  35. if [ "${filesFromSecondDir[$filename]}" == "" ]; then
  36. echo There is no element in second dir for ${filesFromFirstDir[$filename]}
  37. continue
  38. fi
  39. cmp "${filesFromFirstDir[$filename]}" "${filesFromSecondDir[$filename]}"
  40. if [ $? -ne 0 ] && [ $diff -eq 1 ] ; then
  41. read -p "Open diff? [y/n] " open_diff
  42. if [ "$open_diff" == "y" ] || [ -z "$open_diff" ]; then
  43. vimdiff "${filesFromFirstDir[$filename]}" "${filesFromSecondDir[$filename]}" 2> /dev/null
  44. fi
  45. fi
  46. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement