Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- print_usage() {
- printf "Usage: ./comparer.sh [-d] PATTERN FIRST_DIR SECOND_DIR\n"
- printf "Compares all files (recursively) found that match the PATTERN in FIRST_DIR to files found in SECOND_DIR.\n"
- printf "If the files differ and -d is used you are offered to view the diff.\n"
- }
- declare -A filesFromFirstDir
- declare -A filesFromSecondDir
- diff=0
- while getopts 'dh' flag; do
- case "${flag}" in
- d) diff=1;;
- h) print_usage; exit 0;;
- esac
- done
- if [ $diff -eq 1 ]; then
- shift "$((OPTIND - 1))"
- fi
- for filepath in $(find $2 -name "$1"); do
- filename=$(echo $filepath | rev | cut -d/ -f1 | rev)
- filesFromFirstDir[$filename]=$filepath
- done
- for filepath in $(find $3 -name "$1"); do
- filename=$(echo $filepath | rev | cut -d/ -f1 | rev)
- filesFromSecondDir[$filename]=$filepath
- done
- for filename in ${!filesFromFirstDir[@]}; do
- if [ "${filesFromSecondDir[$filename]}" == "" ]; then
- echo There is no element in second dir for ${filesFromFirstDir[$filename]}
- continue
- fi
- cmp "${filesFromFirstDir[$filename]}" "${filesFromSecondDir[$filename]}"
- if [ $? -ne 0 ] && [ $diff -eq 1 ] ; then
- read -p "Open diff? [y/n] " open_diff
- if [ "$open_diff" == "y" ] || [ -z "$open_diff" ]; then
- vimdiff "${filesFromFirstDir[$filename]}" "${filesFromSecondDir[$filename]}" 2> /dev/null
- fi
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement