У меня есть папка, содержащая много папок, содержащих много файлов. Тысячи.
Я могу find . -type f > ./FILE-LISTING.TXT
создать файл, содержащий многие тысячи путей к файлам, который выглядит так:
./Anders/Letters/20190101 Rent.pdf
./Anders/Letters/20190103 Appeal.pdf
./Anders/Letters/20190107 Decision.pdf
./Beeker/Letters/20180101 Rent.pdf
Как бы я передал этот список путей к файлам, md5
чтобы получить вывод, отформатированный следующим образом:
9cf14e4d666dcb6aab17763b02429a19 ./Anders/Letters/20190101 Rent.pdf
d1bb70baa31f1df69628c00632b65eab ./Anders/Letters/20190103 Appeal.pdf
7a0f5bc18688fe8ba32f43aa6ec53fb1 ./Anders/Letters/20190107 Decision.pdf
a0c96a79cf3b1847025d9f073151519d ./Beeker/Letters/20180101 Rent.pdf
NB: мне нужны хэши md5 ссылочных файлов, а не md5 списка файлов или хэши md5 строк в файле-listing.txt.
Кроме того, будет ли быстрее сделать все это в одной командной строке или в два прохода (создать find
файл-листинг.txt, а затем md5
создать файл-листинг-md5.txt)?
find . -type f -exec /sbin/md5 -r {} +
^^^^^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^
| | | | |
| | | | +- add as many file names as possible per call
| | | +---- replace with names of found files
| | +------------ command to run
| +--------------------- execute following command
+---------------------------- find any "normal" file
должен помочь (и позаботиться об обычных проблемах с пробелами и т. д. в именах файлов).
Насчет быстрее: один проход почти всегда быстрее, чем два прохода. В конкретном случае расчет MD5 занимает так много времени, что другие факторы, скорее всего, можно не учитывать.
PS: Передаю шляпу @lhf за то, что напомнил мне о-r
time
. Версия find -exec
была примерно на 3 секунды быстрее, чем find | xargs
. Однако время выполнения для обоих было около 45 секунд, что означает, что (а) разница составляет менее 10% и (б) время, вероятно, связано с вводом-выводом (вывод на консоль).Попробуй это:
find . -type f -print0 | xargs -0 md5 -r
Обратите внимание -print0
и -0
для обработки пробелов в именах файлов.
По сравнению с find . -type f -exec
, это решение запускается md5
намного реже, хотя это может не иметь заметного влияния.
find
также может -exec {}
обрабатывать пробелы в именах файлов.time
. Версия find -exec
была примерно на 3 секунды быстрее, чем find | xargs
. Однако время выполнения для обоих было около 45 секунд, что означает, что (а) разница составляет менее 10% и (б) время, вероятно, связано с вводом-выводом (вывод на консоль).
bmike
Джим Л.
mtree
— это уже доступный инструмент для мониторинга хэшей файлов и обнаружения изменений в именах файлов, содержимом файлов, разрешениях или метках дат.man mtree
для деталей.mtree -c -K md5digest
Эрикс