Erro "Lista de argumentos muito longa" para `rm -rf *` em um diretório com 4000 arquivos


2

Eu pensei que esse problema foi corrigido no Linux há 10 anos. 4000 arquivos realmente não parecem muito excessivos e devem poder ser removidos sem problemas. Portanto, esse problema existe claramente no OS X - talvez não no Ubuntu. Estou desenvolvendo no OS X e implantando no Ubuntu

Existe uma solução alternativa no nível do sistema em qualquer ambiente? Eu realmente não quero ter que pensar sobre esse problema para um número tão pequeno de arquivos? Esse problema ainda existe no Linux, especificamente no Ubuntu?


O que você está perguntando? Mac OS X ou Ubuntu?
Wuffers

11
uhh ... Eu acho que o título é bastante clara
Timpone

11
E então você foi e confundiu com a última pergunta
soandos

Revise sua pergunta. Não está claro qual sistema você está perguntando, se você está perguntando sobre a causa ou uma solução alternativa.
Daniel Beck

@ timpone: Não, não é. Você pergunta sobre o Mac OS X no título, mas sua pergunta em si só menciona o Ubuntu.
Wuffers

Respostas:


5

Isso ainda é um problema em todos os Unixes que conheço e no Windows. É realmente um limite para o número de bytes transmitidos na linha de comando, não para o número de arquivos ou o que for.

Tente getconf ARG_MAXver o limite (em bytes) para o seu Unix. Você pode usar o xargscomando para solucionar esses problemas.


xargs tende a ser LENTO - apenas mais surpreso que isso ainda seja um problema do que qualquer coisa. procedimento comum. ugh ...
timpone

Esse problema específico não aparece no Windows com tanta frequência, porque o shell não expande curingas, cabe a cada aplicativo fazer isso.
22712 afrazier

Sim, mas eu também diria que uma grande razão para esse caso é que o Windows tradicionalmente possui recursos de shell sub-par, então ninguém gosta de usá-lo muito. Dito isso, eu encontrei esse problema no Windows enquanto compilava um projeto com uma grande lista de nomes de caminho longos sendo passados ​​para o executável do compilador.
Jjlin

5

Este não é um problema, mas um limite. Você pode usar algo como isto:

find ./ -exec rm -rf {} \;

Ou qual é o problema de não usar uma alternativa que faça o trabalho?


hmm .... talvez apenas alias rm -rf a isso?
Timpone

3

Embora eu não possa falar por outros * nixs, AFAIK, esse "problema" sempre existiu no Mac OS X.

ARG_MAX é definido como o seguinte em /usr/include/sys/syslimits.h:

#define ARG_MAX   (256 * 1024)  /* max bytes for an exec function */

sysctl kern.argmax retorna:

kern.argmax: 262144

(Isso ocorre no Mac OS X 10.7.3; muitos desses tipos de limites foram aumentados gradualmente ao longo da vida útil do OS X).


thx, útil saber
timpone

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.