В debian/ubuntu я хочу:
a) создайте список всех файлов в одном дереве каталогов
b) сделайте то же для второго дерева каталогов
c) сравните два списка, таким образом, что, только имена файлов сравнены (т.е. просто сравнение части "file.txt" так, чтобы "/home/folder/file.txt" == "/home/secondfolder/folder/file.txt)
d) произведите список всех дубликатов
кто-либо может объяснить, как сделать это использование языки сценариев или regex или что-то?
Использовать find /some/dir -printf '%f\t%p\n > files<N>.lst'
или некоторый вариант этого для нахождения файлов в деревьях, затем join -j 1 files1.lst files2.lst
объединить списки файлов в единственный вывод.
Вот пример, который работал бы с [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 итератор, кто вытаскивает все фактические файлы, соответствующие контрольной сумме (и вставляющий пустую строку между группами.)
Это разделяет группировки дубликатов пустой строкой. Это предлагает очевидное преимущество (выше и вне исходного запроса) нахождения дубликатов файлов, которые имеют то же содержание, но отличающиеся имена файлов.