Рекурсивное сравнение двух каталогов на основе контрольных сумм?

Рекурсивное сравнение двух каталогов на основе контрольных сумм?

Я пытаюсь найти несуществующие файлы по контрольной сумме их содержимого. У меня есть два каталога /fooи /bar, оба эти каталога представляют произвольные состояния в системе, я хочу найти всефайлыв корне /bar, которые не существуют в корне /foo(рекурсивно). Словарь /bar/**с

CheckSum -> filepath

меньше словарь /foo/**с

CheckSum -> filepath  

Я могу написать это с помощью md5sum или чего-то подобного, но должна быть уже утилита, которая это делает.

Для ясности: если два файла идентичныкромепо местоположению (имени и пути) я хочу, чтобы они были идентифицированы как одно и то же.

Прецедент

Давайте создадим дерево с некоторыми тестовыми данными,

/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│   └── findMe
└── quz
    └── asdf
        └── otherFileName (duplicate of /tmp/foo/myFile)

Скрипт для создания,

mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz

# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName

# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10

Итак, программа сравнивает /tmp/fooи /tmp/barдолжна найти/tmp/bar/qaz/findMe

решение1

Я бы сгенерировал список md5sum (столбец для суммы и столбец для имени файла) для обоих деревьев и передал бы результат в скрипт (например, awk или perl), который мог бы использовать сумму в качестве хеша для имен файлов, а также заставил бы скрипт выдавать имена файлов с одинаковым значением хеша.

Это не просто однострочный ответ, это часто задаваемый и часто решаемый вопрос (поиск в Интернете дубликатов файлов по содержимому выдает более миллиона результатов).

Это может оказаться вам полезным:

Связанный контент