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 .*

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.


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.


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


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.


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


2

Oh meu Zsh

rm -rf (.|)*

Novamente, isso é apenas para o Zsh.


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 {} \;

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.