Как проверить, что каждый файл в папке A существует в папке B?

Как проверить, что каждый файл в папке A существует в папке B?

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

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

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

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

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

решение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

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