Como faço para excluir tudo em um diretório?

25

Como faço para excluir tudo em um diretório, incluindo arquivos e diretórios ocultos?

No momento, eu uso o seguinte:

rm -rf *
rm -rf .*
David Smith
fonte
5
Você pode combiná-los para rm -rf .* *.
desconhecido usuário
2
Você pode ir um diretório para cima e, em seguida, executarrm -rf yourdirectory/*
shreyansp
11
sorry perdeu a parte do diretório oculto. As tampas de soluções usuários anteriores que
shreyansp
Essa segunda opção que você postou é muito perigosa. Ele corresponderá ao ..diretório, que excluirá o que estiver no diretório acima .
Richard Peterson

Respostas:

17

Simples e direto:

find -delete 

Inclui diretórios e arquivos ocultos. Pelo menos o gnu-find sabe -delete, você findpode diferir.

Usuário desconhecido
fonte
11
Para evitar excluir o diretório, use find /path -delete -mindepth 1.
precisa saber é o seguinte
@orodbhen: find -delete não exclui o diretório em que você inicia o comando (como na pergunta com rm).
usuário desconhecido
11

A melhor resposta é: não faça isso. Remova recursivamente o próprio diretório e recrie-o como um diretório vazio. É mais confiável e fácil para outras pessoas entenderem o que você está tentando fazer. Quando você recriar o diretório, ele poderá ter um proprietário, grupo e permissões diferentes. Se esses são importantes, tenha cuidado. Além disso, se algum programa em execução tiver identificadores de arquivo abertos (descritores) no diretório, não será necessário removê-lo. Se nenhum desses casos especiais se aplicar, será mais fácil remover o diretório inteiro.

Chris Quenelle
fonte
7
Então, como isso é mais fácil? 'Cuidado' não é uma resposta. Eu não entenderia por que alguém exclui um diretório e o reconstrói novamente.
desconhecido usuário
Eu adicionei a frase "como um diretório vazio", talvez seja mais claro.
22430 Chris Quenelle
2
Não, não explica por que você exclui um diretório e o recria. Pertence às coisas a considerar, entre também data e hora da criação.
usuário desconhecido
2
Se esse diretório for o diretório de trabalho atual de algum processo, você poderá ter problemas. Além disso, se você remover o diretório, removerá informações sobre suas permissões e propriedade.
8
rm -rf -- * .[!.]* ..?*

Cada um dos três padrões se expande se não corresponder a nada, mas isso não é um problema aqui, já que queremos corresponder a tudo e rm -fignoramos argumentos inexistentes.

Observe que .*corresponderia.. .

Gilles 'SO- parar de ser mau'
fonte
5

Supondo que o bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Com o dotglob ativado, se *expande para todos os arquivos e diretórios, mesmo aqueles que começam com .- mas não se expandem para .e .., portanto, é seguro usá-lo rm.

evilsoup
fonte
2

se você estiver no diretório:

cd .. && rm -rf dir && mkdir dir && cd dir

de outra forma:

rm -rf /path/to/dir && mkdir /path/to/dir

David Harris
fonte
2

Oh meu Zsh

rm -rf (.|)*

Novamente, isso é apenas para o Zsh.

phunehehe
fonte
2
Ou *(D)(o Dqualificador glob ativa a glob_dotsopção para esse padrão).
Gilles 'SO- stop be evil'
Ou rm -rf {.,}*(ao contrário do bash, zsh não inclui .e ..em {.,}*, pelo menos na minha máquina).
Sasha
1

Que tal usar find. Eu acho que essa geralmente é uma boa escolha, quando você precisa procurar nos subdiretórios.

find . -type f -exec rm {} \;
slashdot
fonte
11
existe uma opção -delete, para que você possa excluir diretórios. (pelo menos no gnu-find).
desconhecido usuário
isso não vai apagar subdiretórios
sasha
-2

Tente rm -rf *?*. Isso excluirá arquivos normais e ocultos.

gladimdim
fonte
4
Não em nenhuma concha que eu conheça.
Gilles 'SO- stop be evil'
você está certo. ele não exclui subdiretórios.
gladimdim
4
É mais provável que *?*o problema não corresponda aos arquivos / diretórios "ponto" (a menos que você tenha ativado a dotglobopção no bash , a GLOB_DOTSopção no zsh ou um equivalente para qualquer shell que esteja usando).
Chris Johnsen