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?

timpone
fonte
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.

jjlin
fonte
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?

hereje
fonte
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).

NSGod
fonte
thx, útil saber
timpone
O mesmo limite existe no Linux porque está definido no padrão POSIX . grep ARG_MAX /usr/include/linux/limits.hno meu Ubuntu retorna 131072. O que define o tamanho máximo para um único argumento de comando? , Qual é o tamanho máximo dos argumentos da linha de comando no gnome-terminal?
phuclv