rm -rf /some/path/*
exclui todos os arquivos não ocultos nesse diretório (e subdireta).
rm -rf /some/path/.*
exclui todos os arquivos ocultos nesse diretório (mas não os subdiretórios) e também fornece o seguinte erro / aviso:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
Qual é a maneira correta de remover todos os arquivos e pastas ocultos e não ocultos recursivamente em um diretório de destino sem receber o aviso / erro sobre .
e ..
?
rm ..?* .[!.]*
deve fazê-lo).*
corresponde a todos os arquivos que não sejam pontos,.[!.]*
corresponde a todos os arquivos de pontos, exceto os.
arquivos cujo nome começa com..
, e..?*
corresponde a todos os arquivos de pontos, exceto..
. Juntos, eles correspondem a todos os arquivos que não sejam.
e..
. Se algum desses três padrões não corresponder a nada, ele se expande;rm -f
não se importa com argumentos inexistentes, portanto isso não importa.Você também pode usar
find
. Isso é mais complexo, mas tem a vantagem de funcionar, mesmo que haja tantos arquivos que os curingas acima se expandam além do limite de comprimento da linha de comando do sistema.Você pode achar mais claro remover e recriar o diretório. Isso tem a vantagem (ou desvantagem, conforme o caso) de resultar em um diretório vazio, mesmo que outro programa esteja criando simultaneamente arquivos no diretório original.
fonte
find
alternativa retorna "sucesso" mesmo que algum arquivo não seja excluído com êxito; não é bom para script.find
comando, a página de manual dos estados find "Como -delete implica -thth, você não pode usar utilmente -une e -delete juntos." - você ainda usa-prune -delete
?-prune
não faz nada aqui. E, ao ler de volta, vejo que não respondi à pergunta corretamente: tomei o cuidado de não recorrer, mas a pergunta pede explicitamente a exclusão recursiva. Eu corrigi minha resposta..[^.]*
vez de.[!.]*
quando a substituição do histórico está ativada (que por padrão é o caso interativamente, mas não nos scripts), porque o zsh analisa!
como uma referência do histórico. Mas no zsh você não precisaria disso em primeiro lugar, basta usar*(D)
arquivos de ponto (sem.
ou..
) na correspondência de curinga.Acabei de perceber que esta é a maneira mais conveniente na maioria das distribuições Linux:
Onde
-A
= lista tudo, exceto.
e..
-1
= coloca todos os itens em uma linhafonte
ls -A1 /your/path/ | xargs rm -rf
deve aplicarAltere a
dotglob
opção do seu shell e use*
, ou use algo parecidofind
.fonte
rm -rf /some/dir
criar um novo diretório vazio em seu lugar.Isso deve funcionar como a resposta do @Gilles, mas mais compacto:
ou
Também deve adicionar um
if
para uso em scripts apenas para garantir:fonte
alias cleandir='rm -rf {,.[!.],..?}*'
faz.Find é seu amigo.
Se você deseja usar a pesquisa recursiva em outro diretório atual ($ PWD), adicione um caminho logo após o
find
comando; por exemplofind /path ! -name '.' ! -name '..' -delete
,. Se você deseja apenas descer on
número de diretórios, use a-maxdepth n
opção logo após o/path
parâmetroO comando acima foi testado em um sistema Ubuntu 13.04. Provavelmente funcionará em outros sistemas Linux modernos.
fonte
find . ! -name '.' ! -name '..' -type d -delete
Supondo que o diretório em questão seja
./dir
,removeria todos os arquivos
./dir
, incluindo arquivos e diretórios ocultos, recursivamente e incluindo o./dir
próprio diretório.Se você não deseja excluir o próprio diretório, poderá recriá-lo posteriormente ou usar
ou se você
find
não suportar-delete
,Usar
-mindepth 1
permite manter o diretório de nível superior./dir
.fonte
Eu sugiro que você experimente
Turn ON pontos (arquivos ocultos)
conjunto
dotglob
shopt -s dotglob
Turn OFF pontos
incerto
dotglob
shopt -u dotglob
Esse método funcionou exatamente como eu desejava para um comando de cópia que estava ausente nos diretórios ocultos.
Então eu fiz uma remoção (exclusão) e oops ...
... isso funciona também!
Ocorre-me que você, caro leitor, não pode ver o
message_splitter
diretório. De qualquer maneira, ele possui uma.svn
pasta que precisa ser removida e copiada para o.Da
man
página ...referências:
fonte
Tente este código:
fonte