Я пытался найти все файлы определенного типа, распределенные в подкаталогах, и для моих целей мне нужно было только имя файла. Я попытался удалить компонент пути через basename
, но он не работал с xargs
:
$ find . -name '*.deb' -print | xargs basename
basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb'
Try `basename --help' for more information.
Я получаю то же самое (точно такую же ошибку) с любым из этих вариантов:
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
Это, с другой стороны, работает как ожидалось:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
Это происходит в современных Cygwin и Debian 5.0.3. Мой диагноз состоит в том, что xargs по какой-то причине передает две входные строки в basename, но почему? Что тут происходит?