remove conteúdo do diretório de maneira elegante

1

Gostaria de remover todo o conteúdo do diretório de trabalho atual. Como fazê-lo de maneira eficiente e elegante?

Eu tenho vários arquivos, diretórios e alguns deles começam com ponto, como:

touch .abc; touch abcd ; mkdir foobar; touch "file name" "#"

Eu estou procurando uma solução elegante e compatível com posix, para tornar esse diretório vazio. Vou postar algumas das minhas ideias, mas nenhuma delas é perfeita.

    
por Michał Šrajer 11.04.2013 / 11:49

8 respostas

6

rm -rf -- * .*

Isso é portátil e funciona, mas é feio, porque, exceto com zsh , ele emite avisos:

rm: cannot remove directory: '.'
rm: cannot remove directory: '..'
    
por 11.04.2013 / 11:52
2

Tente isto:

find . -maxdepth 1 -not -name \. -exec rm -rf \{\} ;
    
por 11.04.2013 / 12:17
2

POSIXly:

rm -rf -- * .[!.]* ..?*

Esse pode falhar se a lista de arquivos for muito grande, mas essa não seria:

find . ! -name . -prune -exec rm -rf {} +

com zsh :

rm -rf -- *(D)
    
por 11.04.2013 / 12:42
1

A melhor solução que encontrei é:

find . -delete

no entanto, -delete predicado é arriscado (veja man) e eu não gosto de usá-lo.

Atualização:

Eu não gosto do predicado -delete porque ele pode causar um desastre quando usado por alguém não familiarizado com os detalhes da lógica do find. Por exemplo:

find . -delete -name '*.bak'  # DO NOT DO IT!!!

Alguém pode esperar que essa chamada remova apenas arquivos "* .bak", mas é exatamente equivalente a find . -delete .

    
por 11.04.2013 / 11:58
0

que tal

 rm -rf * .[a-z]* .[A-Z]* .[0-9]*

isso funcionará? ou você tem outros padrões de nome de arquivo para combinar também?

    
por 11.04.2013 / 12:00
0

outra opção é lembrar o valor de pwd , cd .. , rm -rf do diretório e recriar o diretório. Isso também é feio por muitas razões.

BTW, por favor, não desista. Comente se necessário.

    
por 11.04.2013 / 12:01
0

Primeiro, exclua os arquivos e, em seguida, os diretórios vazios:

find . -type f -exec rm \{\} \;
find . -depth -type d -empty -exec rmdir \{\} \;
    
por 11.04.2013 / 12:19
-2
rm -rf .

Isso, é claro, não funciona, no entanto:

rm -rf -- "$PWD"

remove o CWD e acabamos no diretório inexistente. Isso é muito feio.

BTW, por favor, não desista. Comente se necessário.

    
por 11.04.2013 / 11:57