rm -rf -- * .*
Isso é portátil e funciona, mas é feio, porque, exceto com zsh
, ele emite avisos:
rm: cannot remove directory: '.'
rm: cannot remove directory: '..'
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.
rm -rf -- * .*
Isso é portátil e funciona, mas é feio, porque, exceto com zsh
, ele emite avisos:
rm: cannot remove directory: '.'
rm: cannot remove directory: '..'
Tente isto:
find . -maxdepth 1 -not -name \. -exec rm -rf \{\} ;
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)
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
.
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?
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.
Primeiro, exclua os arquivos e, em seguida, os diretórios vazios:
find . -type f -exec rm \{\} \;
find . -depth -type d -empty -exec rmdir \{\} \;
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.