
Какой простой способ проверить, имеют ли два разных каталога одинаковое содержимое?
решение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 |