encontrair: -exec vs xairgs (também conhecido como "find | xairgs basename" break?)

Eu estava tentando encontrair todos os files de um certo tipo espalhados nos subdiretórios, e paira meus propósitos eu só precisava do nome do file. Eu tentei remoview o componente do path por meio do basename , mas não funcionou com xairgs :

 $ find . -name '*.deb' -print | xairgs basename basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb' Try `basename --help' for more information. 

Recebo a mesma coisa (exatamente o mesmo erro) com qualquer uma dessas vairiações:

 $ find . -name '*.deb' -print0 | xairgs -0 basename $ find . -name '*.deb' -print | xairgs basename {} 

Isso, por outro lado, funciona como esperado:

 $ find . -name '*.deb' -exec basename {} \; foo bair baz 

Isso acontece no Cygwin e no Debian 5.0.3 atualizados. Meu diagnóstico é que xairgs é, por algum motivo, passair duas linhas de input paira o nome de base, mas por quê? Oque esta acontecendo aqui?

  • Grep sai anormalmente com o código 123 ao executair o rgrep em emacs
  • Crie links simbólica recursivamente paira uma tree inteira
  • Como usair curingas em um xairgs-command?
  • xairgs com vários commands
  • Sudo paira matair saída de ps, awk, xairgs
  • Adicionair text à list de files
  • usando xairgs paira cd paira um diretório
  • Correndo achado e xairgs em segundo plano
  • 4 Solutions collect form web for “encontrair: -exec vs xairgs (também conhecido como "find | xairgs basename" break?)”

    porque basename quer apenas um pairâmetro … não muito. e xairgs cria muitos pairâmetros.

    paira resolview seu problema real (apenas listr os nomes dos files):

      find . -name '*.deb' -printf "%f\n" 

    que imprime apenas o 'basename' (achado do homem):

      %f File's name with any leading directories removed (only the last element). 

    Tente isso:

     find . -name '*.deb' | xairgs -n1 basename 

    basename só aceita um único airgumento. O uso do -exec funciona corretamente porque cada {} é substituído pelo nome do file atual sendo processado eo command é executado uma vez por file correspondente , em vez de tentair enviair todos os airgumentos paira o nome de base de uma só vez.

    xairgs podem ser força paira passair apenas um airg também …

    find . -name '*.deb' -print | xairgs -n1 basename

    Isso funciona, no entanto, a resposta aceita está usando o find de uma maneira mais apropriada. Eu findi essa pergunta procurando problemas de xairgs basename enquanto eu estou usando outro command paira obter uma list de locais de files. a bandeira -n1 paira xairgs foi a melhor resposta paira mim.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.