Конвейерная обработка и xargs

Я пытаюсь удалить некоторых.class файл из каталога. Таким образом, сначала я имею усталый для подсчета доступного .class файл с помощью следующей команды (после движения к каталогу) -

$ find . -name *.class | wc -l   

Здесь я могу понять роль конвейерной обработки (|) - вывод find управляйте/обрабатывайте работами как входом wc команда (исправьте меня, Если я неправ). Вышеупомянутая команда хорошо работает для меня, и произведите корректный вывод. Но когда я пытаюсь удалить все.class файлы с помощью следующей команды с конвейерной обработкой -

$ find . -name *.class | rm *  # case-1

затем это не делает работ. Это показывает следующую ошибку -

rm: cannot remove `<a_directory_name>': Is a directory
rm: cannot remove `<an_another_directory_name>': Is a directory  

Но когда я использую xargs затем это хорошо работает -

$ find . -name *.class | xargs rm *  # case-2

Теперь моим вопросом является банка, которую любой говорит мне почему case-1 не делает работ в то время как case-2 хорошо работает?.

Заранее спасибо.

0
задан 16 March 2015 в 11:47

1 ответ

Причина, что Случай 1 не работает, состоит в том, что rm не берет аргументы через STDIN, он берет аргументы или файлы для удаления как:

rm file_1 file_2

принимая во внимание, что в Случае 2 xargs берет вывод эти find команда через STDIN и преобразовывает имена файлов как аргументы в пользу эти rm команда.

читайте man rm и man xargs для получения большей идеи об этом.

2
ответ дан 5 October 2019 в 02:20

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

Похожие вопросы: