1

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

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

Я проверил man- страницу для fdupes если был какой-то способ сделать обратную операцию (то есть выяснить, какие файлы не имеют копий), но появился с пустыми руками, даже если бы функционал существовал, у меня все еще есть файлы, которые существуют только в папке B.

Эти два вопроса были похожи, но были только для Windows, поэтому не сильно помогли:

Заранее спасибо.

1 ответ1

1

Если у вас уже есть список дубликатов файлов, просто сравните его со списком всех файлов, чтобы найти отдельные:

fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f)
  • -w только объединяет целые слова (не подстроки, поэтому файл abcd не сопоставляется с abc)
  • -F считает шаблоны буквальными, а не регулярными выражениями
  • -f использует указанный файл (- в данном случае, т.е. стандартный ввод) в качестве списка выражений для сравнения.
  • -v как вы, наверное, знаете, показывает несоответствующие строки.

Это должно привести к выводу списка, содержащего файлы, найденные только в одной из папок, должно быть легко проверить, что они все находятся в папке B, просматривая или подбирая имя папки A (ниже называется dir1), например так:

fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f) | grep -F dir1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .