Грязный Filesytem: Удаление Дубликата файла из командной строки

В debian/ubuntu я хочу:

a) создайте список всех файлов в одном дереве каталогов
b) сделайте то же для второго дерева каталогов
c) сравните два списка, таким образом, что, только имена файлов сравнены (т.е. просто сравнение части "file.txt" так, чтобы "/home/folder/file.txt" == "/home/secondfolder/folder/file.txt)
d) произведите список всех дубликатов

кто-либо может объяснить, как сделать это использование языки сценариев или regex или что-то?

2
задан 10.04.2017, 05:10

2 ответа

Использовать find /some/dir -printf '%f\t%p\n > files<N>.lst' или некоторый вариант этого для нахождения файлов в деревьях, затем join -j 1 files1.lst files2.lst объединить списки файлов в единственный вывод.

1
ответ дан 12.12.2019, 00:18

Вот пример, который работал бы с [t] csh, sh, и т.д., использование 'находят', 'awk', 'вид', 'uniq', и/bin/sh острота для выполнения 'md5sum' для получения подписи каждого файла. Со списком подписей для файлов обеих структур каталогов последовательность команды возвратит те файлы, которые являются тем же:

find a/ b/ -type f -exec md5sum {} \; > /tmp/list; awk '{print $1}' ' | awk '{print $2}' | sh -c 'while read s; do awk "/^$s/ { print \$2}" /tmp/list; echo; done'

По существу это генерирует md5sum для всех файлов в каталог и 'b' каталог. Шестнадцатеричные строки (первый столбец) питаются к конвейеру, отфильтровывающему экземпляры просто отдельного проявления для данной контрольной суммы, передавая остаток на/bin/sh итератор, кто вытаскивает все фактические файлы, соответствующие контрольной сумме (и вставляющий пустую строку между группами.)

Это разделяет группировки дубликатов пустой строкой. Это предлагает очевидное преимущество (выше и вне исходного запроса) нахождения дубликатов файлов, которые имеют то же содержание, но отличающиеся имена файлов.

0
ответ дан 12.12.2019, 00:18

Теги

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