grep -a
работал у меня:
$ grep --help
[...]
-a, --text equivalent to --binary-files=text
rmlint tiene opciones para hacer esto:
rmlint -T duplicates --match-basename --keep-all-tagged --must-match-tagged /duplicates // /originals
(el separador '//' identifica rutas "etiquetadas" para--mantener -todos -etiquetados y--deben -coincidir con -etiquetados interruptores)
Después de encontrar duplicados, rmlint crea un script ejecutable rmlint.sh que puede ejecutar (después de verificar )para eliminar los duplicados.
Выполнение любой команды с параметром --delete
заставляет меня нервничать, поэтому я написал следующий скрипт для поиска файлов, которые являются ОБЩИМИ как для $DIR1, так и для $DIR2, но будут перемещать файлы только из $DIR1 в папку для мусора. для последующего просмотра, оставляя уникальные файлы позади. Он также сохраняет структуру каталогов в папке корзины, что упрощает восстановление.
IFS=$'\n'
for file in `jdupes -r -T -T "$DIR1" "$DIR2" | awk -v p1="$DIR1" -v p2="$DIR2" '$0 ~ p1 && $0 ~ p2' RS="\n\n" ORS="\n\n" | grep "$DIR1"`; do
echo "$file" | grep -q "^$DIR1/duplicated_files/" && continue
output="$DIR1/duplicated_files/`dirname "$file" | awk -v p="$DIR1/" '{sub(p, "")}1'`"
mkdir -p "$output"
echo "Moving $file"
mv "$file" -t "$output"
done
Это оставит после себя пустые каталоги, которые можно удалить с помощью:
find "$DIR1" -type d -empty -printf "Deleting empty folder: " -print -delete