Я не использовал инструмент md5deep
, но я считаю, что эти строки являются сообщениями об ошибках; они будут идти к стандартной ошибке вместо стандартного выхода, и поэтому они будут идти прямо к вашему терминалу, а не через канал. Таким образом, они не будут отфильтрованы вашей командой sed. Вы можете отфильтровать их, объединив ваши стандартные ошибки и стандартные выходные потоки, но
Похоже (я не уверен, потому что вам не хватает обратных кавычек) вы пытаетесь позвонить
md5deep `find *`
и find возвращает все файлы и каталоги.
Несколько замечаний о том, что вы можете сделать:
Похоже, у md5deep
есть опция -r для "рекурсивного" параметра. Итак, вы можете попробовать:
md5deep -r *
вместо команды поиска.
Если вы хотите использовать команду find
, вы можете ограничить ее только файлами, использующими -type f
, вместо файлов и каталогов. Кроме того, вам не нужно передавать *
в команду поиска (что может сбить с толку find
, если есть файлы с именами, похожими на параметры, которые понимает find
); передача в .
будет рекурсивно искать в текущем каталоге.
find . -type f
В sed
, если вы хотите использовать косые черты в вашем шаблоне, может быть затруднительно правильно цитировать их с помощью \. Вместо этого вы можете выбрать другой символ для ограничения вашего регулярного выражения; sed
будет использовать первый символ после команды s
в качестве разделителя. Вашему шаблону также не хватает .
; в регулярных выражениях, чтобы указать один экземпляр любого символа, который вы используете .
, и чтобы указать «ноль или более предшествующего выражения», вы используете *
, поэтому .*
означает «ноль или более любого символа» (это отличается от шаблонов глобуса, в которых *
означает «ноль или более любого символа»).
sed "s|/.*||g"
Если вы действительно хотите включить стандартный поток ошибок в стандартный вывод, чтобы он проходил через канал, тогда вы можете выполнить:
md5deep `find *` 2>&1 | awk ...
Если вы просто хотите игнорировать stderr, вы можете перенаправить его на /dev/null
, который является специальным файлом, который просто отбрасывает все, что входит в него:
md5deep `find *` 2>/dev/null | awk ...
В целом, я думаю, что приведенная ниже команда поможет вам решить вашу непосредственную проблему, а другие перечисленные выше рекомендации могут помочь вам, если я не понял, что вы искали:
md5deep -r * | awk '{ print $1 }'