Próbowałem znaleźć wszystkie pliki określonego typu rozproszone w podkatalogach i do moich celów potrzebowałem tylko nazwy pliku. Próbowałem usunąć komponent ścieżki przez basename
, ale to nie działało z 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.
Otrzymuję to samo (dokładnie ten sam błąd) z jedną z tych odmian:
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
To z kolei działa zgodnie z oczekiwaniami:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
Dzieje się tak w aktualnych wersjach Cygwin i Debian 5.0.3. Moja diagnoza jest taka, że xargs z jakiegoś powodu przekazuje dwie linie wejściowe do basename, ale dlaczego? Co tu się dzieje?