Essa é raro, mas acontece$ cd /meu/diretorio
$ rm *.dll
Error: The parameter list is too long
- O que? Eu não posso apagar todos os meus 3459834574935734957 arquivos?
Bom, primeiro vamos analisar o que aconteceu: a linha de comando 'rm *.dll' é expandida pelo shell corrente a 'rm arquivo1.dll arquivo2.dll ... arquivoN.dll' e, nesse caso, esta lista de parâmetros foi demais pro probrezinho do rm.
Com o xargs é facil de resolver!$ find /meu/diretorio -name '*.dll' -print | xargs rm
O que ele faz? o xargs recebe pela stdin toda uma lista de parâmetros que será entregue ao programa rm. Se esta lista extender o limite do sistema, então o xargs, inteligentemente, irá executar o rm uma vez, com a lista que for possível e, depois, executar de novo, até que todos os parâmetros sejam lidos. Aliás o xargs possui muitas opções interessantes, vale a pena dar uma estudada nele.
E assim todas as dll's são apagadas -- em definitivo, pois com rm 'tr00' não tem undelete ;-)
quinta-feira, 26 de julho de 2007
Resolvendo Problemas Comuns 5 - The parameter list is too long
Assinar:
Postar comentários (Atom)
2 comentários:
na verdade a lista de parâmetros não foi demais para o `rm', quem limita isso é o próprio shell (tanto é que, num caso desses, nem um ls * funciona...). também não funcionaria somente `xargs rm', se fosse limitação do `rm'; seria necessário limitar a quantidade de parâmetros com a opção -n pro `xargs'. ;-)
nas máquinas que usei, o limite do bash geralmente fora 32768 parâmetros...
falou!
Ah sim, quem limita/expande os coringas é o shell. Acho que escrevi uma frase ambígua -- valeu!
Postar um comentário