Existem limites para o tamanho do arquivo canalizado de find para xargs ou usando find -exec +

5

Em questão [ Encontre e exclua todos os diretórios chamados "test" no linux ] neste site, a melhor resposta é sobre o uso desses dois comandos:

find . -name test -type d -print0|xargs -0 rm -r --
find . -name test -type d -exec rm -r {} +

porque eles chamam rm com uma lista de diretório em vez de invocá-lo muitas vezes individualmente.

Desde que eu não posso comentar lá devido à baixa reputação, peço aqui em uma nova pergunta:

Existe algum limite no número de arquivos que podem ser passados para a rm usando essas técnicas (além dos limites realísticos de recursos do sistema)?

No shell, um comando como 'rm *' pode exceder o tamanho máximo da linha de comando do shell, mas limites como esse se aplicam a esse uso do find + ou através de um pipe para xargs?

    
por simpleuser 02.04.2014 / 23:37

1 resposta

5

Em suma, não.

A resposta longa: - Localizar executará o comando especificado por exec para cada correspondência, portanto, se o seu achado gerar 20 arquivos, ele executará 20 instâncias separadas de rm. - xargs irá determinar o comprimento máximo de comando para o seu shell e adicionar argumentos dentro desses limites, como você pode ver com a saída de xargs --show-limits mtak@frisbee:~$ xargs --show-limits Your environment variables take up 4050 bytes POSIX upper limit on argument length (this system): 2091054 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2087004 Size of command buffer we are actually using: 131072

    
por 03.04.2014 / 00:11