J'essayais de trouver tous les fichiers d'un certain type répartis dans des sous-répertoires et pour mes besoins, je n'avais besoin que du nom de fichier. J'ai essayé de supprimer le composant de chemin via basename
, mais ça n'a pas marché avec 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.
Je reçois la même chose (exactement la même erreur) avec l'une de ces variantes:
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
Ceci, en revanche, fonctionne comme prévu:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
Cela se produit avec les versions récentes de Cygwin et Debian 5.0.3. Mon diagnostic est que xargs passe pour une raison quelconque en passant deux lignes d’entrée à basename, mais pourquoi? Que se passe t-il ici?