Как сравнить два каталога и удалить повторяющиеся файлы

grep -a работал у меня:

$ grep --help
[...]
 -a, --text                equivalent to --binary-files=text
7
04.02.2018, 17:18
2 ответа

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.

2
27.01.2020, 20:15

Выполнение любой команды с параметром --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
0
27.01.2020, 20:15

Теги

Похожие вопросы