Eu estava tentando encontrar todos os arquivos de um determinado tipo espalhados em subdiretórios e, para meus propósitos, só precisava do nome do arquivo. Tentei remover o componente do caminho via basename
, mas não funcionou com 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.
Eu recebo a mesma coisa (exatamente o mesmo erro) com uma dessas variações:
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
Por outro lado, isso funciona como esperado:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
Isso acontece no Cygwin e no Debian 5.0.3 atualizados. Meu diagnóstico é que, por algum motivo, o xargs está passando duas linhas de entrada para o nome da base, mas por quê? O que está acontecendo aqui?