Действительно, md5sum
без имени файла считывает свои данные (а не аргументы) из стандартного ввода и вычисляет для этого контрольную сумму.
Кстати, echo filename | xargs md5sum
— это обходной путь, если вам действительно нужно читать аргументы со стандартного ввода.
Но здесь у вас нет причин хотеть этого.
find "$FilesDirectory" -type f -iregex '.*\.java' \
-exec md5sum + |
sed 's% *.*/%-%' >"$FileName"
-type f
заменяет if [ -f ...
, а -exec ... +
запускает md5sum
для всех найденных файлов. Затем мы просто постобрабатываем вывод, чтобы поставить тире вместо пробелов после контрольной суммы. Регулярное выражение соответствует пробелам, затем любому символу до последней косой черты и заменяет их все. Таким образом, он также удаляет имя пути.
(Если у вас старая версия find
, возможно, вам придется использовать вместо нее -exec md5sum {} \;
.)
Если все файлы находятся в текущем каталоге, и нет каталогов, соответствующих подстановочному знаку (в этом случае -type f
также является лишним выше), и их не так много, чтобы заставить подстановочный знак расширяться до слишком длинного steing ("Список аргументов слишком длинный"), вы можете просто сделать
md5sum *.[jJ][aA][vV][aA] | ...
Если вам нужно использовать find
и у вас есть подкаталоги, но вы не хотите, чтобы они проходили через них, добавьте -maxdepth 1
.
person
tripleee
schedule
04.09.2014
.exe
? Вы на Cygwin? - person tripleee   schedule 04.09.2014md5sum.exe *.java
— в зависимости от реализацииmd5sum.exe
. - person Mark Setchell   schedule 04.09.2014