Я пытаюсь сравнить 2 тома, которые в основном имеют одинаковое содержание, но в совершенно разных структурах папок (Около 2 миллионов файлов.)
Я хочу увидеть, какие файлы находятся ТОЛЬКО в 1 папке, а не в другой - в зависимости от размера & amp; название.
Я попробовал это:
find /Volumes/1/ /Volumes/2/ -not -empty -type f -printf "%D\t%s\t%f\n" | sort -t$'\t' -k2 -n | uniq -uf1 | sort
Идея состоит в том, чтобы получить список всех файлов с указанием устройства, размера и имени, а затем удалить все дубликаты.
... но это не работает. Я все еще получаю файлы, общие для обоих дисков в моем результате.
В идеале я также хотел бы включить полный путь в список результатов, но я не знаю, как включить его, не испортив сортировку / удаление.
linux
bash
deduplication
Ze'ev
источник
источник
Ответы:
РЕДАКТИРОВАТЬ: ответ о необходимости сохранения устройства
find /Volumes/1/ /Volumes/2/ -type f -printf "%f\n" | sort | uniq -u
покажет файлы, отсутствующие только по имени файлаfind /Volumes/1/ /Volumes/2/ -type f -printf "%s-%f\n" | sort | uniq -u
покажет файлы, пропущенные по соответствию имени файла и размераВторая опция будет выводить файлы дважды, если есть несоответствие размера. Если это не то, что вы хотите, вы можете отфильтровать список следующим образом:
источник
%D
для устройства ... Мне нужно, чтобы результаты включали информацию о том, на каком томе находится файл.Используйте rsync с -R (относительный параметр, чтобы показать полный путь)
Другие ключи командной строки r, v, c и n сообщают rsync (проверьте страницу man для подробностей) выполнить подробную, рекурсивную синхронизацию двух каталогов на основе контрольной суммы, но только для show: -n
Отредактируйте, чтобы разрешить удаление и перемещение файлов, которые вызвали повреждение файловой структуры после первоначальной rsync, которую инициатор выяснил после моего ответа.
измените свою находку на что-то вроде этого:
Используйте printf, чтобы создать первое поле, используя имя файла, за которым следуют поля, которые вам требуются, отсортируйте это первое поле для уникальных файлов, затем удалите поле 1, оставив уникальные файлы. Если вы используете пробелы в именах файлов, вам нужно использовать другой разделитель, чем тот, который я использовал для разделителя вырезок.
источник