Я намагався знайти всі файли певного типу, розповсюджені у підкаталогах, і для моїх цілей мені знадобилося лише ім'я файлу. Я спробував викреслити компонент шляху через 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 чомусь передає два вхідні рядки до базового імені, але чому? Що тут відбувається?