Все ли файлы в коллекции A включены в коллекцию B с различной структурой? - PullRequest
0 голосов
/ 04 ноября 2011

Если у меня есть две коллекции файлов: A и B (скажем, две коллекции фотографий). Существует два совпадения между двумя коллекциями (некоторые для всех фотографий в коллекции A также существуют в коллекции B - возможно, с другим именем файла), но в (потенциально) другой структуре каталогов. Кроме того, файлы в коллекции A могут появляться несколько раз в разных местах коллекции B и наоборот (хотя имена файлов могут отличаться).

Откуда мне знать, что я могу безопасно удалить коллекцию A (т. Е. Что все файлы в коллекции A существуют хотя бы один раз где-нибудь в коллекции B)?

Опять же, это касается содержимого файла, а не имен файлов.

  • diff и производные мне не помогают, поскольку они жалуются на различную файловую структуру между коллекциями A и B.

  • fdupes (http://linux.die.net/man/1/fdupes) (который сравнивает размеры файлов и подписи MD5, а затем выполняет побитовую проверку для проверки) - удобный инструмент для проверки двойников, но имеет неприятную привычку непредсказуемости удаления из какой коллекции он удаляет двойной файл. Параметр «manual» отнимает много времени.

fdupes также кажется неправильным инструментом. Мне просто нужно знать, все ли файлы в коллекции A учтены в коллекции B.

1 Ответ

1 голос
/ 04 ноября 2011

Первое создание из обеих коллекций файлов md5sum

    find CollectionA  -type f -print0 | xargs -0 md5sum -b > CollectionA.MD5SUM
    find CollectionB  -type f -print0 | xargs -0 md5sum -b > CollectionB.MD5SUM

После этого вы найдете все пропущенные файлы в CollectionB

   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo $FILENAME does not exist in CollectionB; done)<CollectionA.MD5SUM

Более удобный

   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo ${FILENAME#\*} does not exist in CollectionB; done)<CollectionA.MD5SUM

чтобы убрать * из начала имени файла.

Вы должны знать, что это решение довольно медленное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...