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.
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.
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.
É 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).
rm -rf .* *
.rm -rf yourdirectory/*
..
diretório, que excluirá o que estiver no diretório acima .Respostas:
Simples e direto:
Inclui diretórios e arquivos ocultos. Pelo menos o gnu-find sabe
-delete
, vocêfind
pode diferir.fonte
find /path -delete -mindepth 1
.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.
fonte
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 -f
ignoramos argumentos inexistentes.Observe que
.*
corresponderia..
.fonte
Supondo que o bash 4+:
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á-lorm
.fonte
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
fonte
Oh meu Zsh
Novamente, isso é apenas para o Zsh.
fonte
*(D)
(oD
qualificador glob ativa aglob_dots
opção para esse padrão).rm -rf {.,}*
(ao contrário do bash, zsh não inclui.
e..
em{.,}*
, pelo menos na minha máquina).Que tal usar
find
. Eu acho que essa geralmente é uma boa escolha, quando você precisa procurar nos subdiretórios.fonte
Tente
rm -rf *?*
. Isso excluirá arquivos normais e ocultos.fonte
*?*
o problema não corresponda aos arquivos / diretórios "ponto" (a menos que você tenha ativado adotglob
opção no bash , aGLOB_DOTS
opção no zsh ou um equivalente para qualquer shell que esteja usando).