Linux конвейерная команда понимание

Я немного новичок в использовании Linux. Сейчас я играю с конвейерной обработкой. Может кто-нибудь сказать мне, почему это не работает:

ls | grep 2 | rm

(Я пытался удалить все файлы, содержащие 2 в их именах) ls | grep 2 часть работает (она возвращает все имена файлов с 2 в них), почему я не могу передать эти имена сейчас rm удалить эти файлы?

спасибо четыре ур помощь заранее:)

1 ответ

Решение

rm ожидает имена файлов в качестве аргументов, тогда как pipe отправляет имена файлов на стандартный ввод (stdin) rm, Вы можете вместо этого сделать:

rm $(ls | grep 2)

удалить файлы. Таким образом, имена файлов передаются в качестве аргументов, а не на стандартный ввод rm,

Я использовал ваши команды, чтобы объяснить проблему. В общем, вы не должны анализировать результат ls команда.

Другие вопросы по тегам