Я пытаюсь удалить некоторых.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
хорошо работает?.
Заранее спасибо.
Причина, что Случай 1 не работает, состоит в том, что rm
не берет аргументы через STDIN, он берет аргументы или файлы для удаления как:
rm file_1 file_2
принимая во внимание, что в Случае 2 xargs
берет вывод эти find
команда через STDIN и преобразовывает имена файлов как аргументы в пользу эти rm
команда.
читайте man rm
и man xargs
для получения большей идеи об этом.