1

Почему echo * | rm -f не -f работать? Насколько я понимаю, echo * должен перечислять все файлы в каталоге, а pipe должен отправлять этот список в качестве аргумента команде rm -f , которая должна удалить файлы. Что мне не хватает?

2 ответа2

7

Труба отправляет данные в стандартный ввод. И не список аргументов. Это две совершенно разные концепции.

Аргументы - это то, что стоит в строке после командной строки. Stdin в основном похож на файл, который уже открыт, из которого вы можете читать.

Также обратите внимание, что делать такие вещи: echo * | xargs rm -f - плохая идея, потому что она может делать странные вещи в случае файлов с пробелами в именах или с «-» в начале.

1

Передайте вывод echo * качестве аргументов, а не ввод стандартных данных из pipe.

rm -f `echo *`

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .