Как проверить, имеют ли два каталога одинаковое содержимое

Как проверить, имеют ли два каталога одинаковое содержимое

Какой простой способ проверить, имеют ли два разных каталога одинаковое содержимое?

решение1

Комбинация find, sha1sum, и ряда труб может достичь этой цели:

find /path/to/files -type f -print0 | sort -z | xargs -0 sha1sum | cut -c1-40 | sha1sum

Это даст вам такой вывод:

98f3a7c54a8f51dd86506a26d4d3bd90e6e4b821  -

Примечание:Конечно, завершающее тире можно проигнорировать.

Запустите это на пути(ах), которые вы хотите проверить, и вы увидите, являются ли два каталога одинаковыми или нет. Если нет, вы можете начать редактировать команду, чтобы найти разные файлы. Один из простых, хотя и требующих много времени, способов сделать это — удалить | cut -c1-40 | sha1sum, который выведет список каждого файла и его соответствующего хэша sha1.

Как это работает?

  Объяснение
find /path/to/files возвращает список элементов из /path/to/filesкаталога
-type f включить только файлы
-print0 вывести полное имя файла на стандартный вывод, за которым следует нулевой символ
| а потом
sort -z отсортируйте список, используя null в качестве разделителя строк вместо символа новой строки
| а потом
xargs -0 sha1sum прогоняем каждое значение из списка черезsha1sum
| а потом
cut -c1-40 братьтолькопервые 40 символов (длина sha1
| а потом
sha1sum сгенерировать хэш sha1 из списка sha1

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