Опция 1: файлы являются чистыми копиями с одинаковыми именами файлов
for file1 in dir1/*; do
[[ -e "dir2/$(basename "$file1")" ]] && echo "$file1"
done
Опция 2: файлы являются чистыми копиями с идентичными именами файлов, но могли произойти измененияпосле копирования.
Следующее также проверяет содержимое
for file1 in dir1/*; do
file2="dir2/$(basename "$file1")"
[[ -e "$file2" ]] && cmp --silent "$file1" "$file2" && echo "$file1"
done
Опция 3: файлы являются копиями, но имена файлов могли измениться.
Взгляните на fdupes
или вы можете сделать следующее:
checksums=$(md5sum dir2/* | awk '{printf substr($1,length($1)-32+1,32) OFS}')
for file1 in dir1/*; do
md5sum=$(md5sum "$file1"| awk '{printf substr($1,length($1)-32+1,32)}')
[[ "$checksums" =~ $md5sum ]] && echo "$file1"
done
В последнем примере мы делаем его немного громоздким, поскольку имена файлов с символами новой строки или забавными символами могут вводить символ вконтрольная сумма (ср. md5sum добавляет «\» к контрольной сумме )
примечание: замените echo "$file1"
на rm "$file1"
после проверки.