Почему echo * | rm -f
не -f работать? Насколько я понимаю, echo *
должен перечислять все файлы в каталоге, а pipe должен отправлять этот список в качестве аргумента команде rm -f
, которая должна удалить файлы. Что мне не хватает?
2 ответа
7
Труба отправляет данные в стандартный ввод. И не список аргументов. Это две совершенно разные концепции.
Аргументы - это то, что стоит в строке после командной строки. Stdin в основном похож на файл, который уже открыт, из которого вы можете читать.
Также обратите внимание, что делать такие вещи: echo * | xargs rm -f
- плохая идея, потому что она может делать странные вещи в случае файлов с пробелами в именах или с «-» в начале.
1
Передайте вывод echo *
качестве аргументов, а не ввод стандартных данных из pipe.
rm -f `echo *`