Essa é raro, mas acontece
- 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!
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 ;-)
$ 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 ;-)
nas máquinas que usei, o limite do bash geralmente fora 32768 parâmetros…
falou!