
Я пытаюсь найти несуществующие файлы по контрольной сумме их содержимого. У меня есть два каталога /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), который мог бы использовать сумму в качестве хеша для имен файлов, а также заставил бы скрипт выдавать имена файлов с одинаковым значением хеша.
Это не просто однострочный ответ, это часто задаваемый и часто решаемый вопрос (поиск в Интернете дубликатов файлов по содержимому выдает более миллиона результатов).
Это может оказаться вам полезным: