2

В Debian / Ubuntu я хочу:

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

Может кто-нибудь объяснить, как это сделать с помощью языков сценариев или регулярных выражений или что-то?

2 ответа2

1

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

0

Вот пример, который будет работать с [t] csh, sh и т.д., Используя команды 'find', 'awk', 'sort', 'uniq' и /bin /sh one-liner для запуска 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 для всех файлов в каталоге 'a' и каталоге 'b'. Шестнадцатеричные строки (первый столбец) передаются в конвейер, отфильтровывающий экземпляры только одного вхождения для данной контрольной суммы, передавая остаток итератору /bin /sh, который извлекает все фактические файлы, соответствующие контрольной сумме (и вставляя пустая строка между группами.)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .