Como remover todos os arquivos e subdiretórios em um diretório sem excluir o diretório no bash?

43

Existe um comando para remover todos os arquivos e subdiretórios em um diretório SEM excluir o diretório?

Por exemplo, se eu tiver o diretório "dontDeleteMe" com os subdiretórios "1", "2", "3" e cada subdiretório tiver algumas imagens, como removerei os subdiretórios "1", "2" e "3" e todos os arquivos neles, sem remover o diretório pai "dontDeleteMe"?

    
por user784637 26.10.2011 / 18:52

10 respostas

57

Para remover tudo em um diretório sem remover o diretório, digite:

rm -rfv dontDeleteMe/*

Por favor, note que a parte /* é muito importante. Se você colocar um espaço antes do * , ele excluirá todos os seus arquivos no diretório atual.

Além disso, tenha muito cuidado com rm , -r e * no mesmo comando. Eles podem ser uma combinação desastrosa.

Atualização: Ok, percebi que você tem arquivos ocultos / ponto [nomes de arquivo com pontos no começo, e.x. .hidden ], então isso deixará esses arquivos intactos.

Então, a solução mais simples para a pergunta original é: rm -rfv dontDeleteMe && mkdir dontDeleteMe

Outro seria usar a opção find do -exec ou pipe para xargs (abaixo):

find dontDeleteMe/* -print0 | xargs -0 rm -rv

    
por Matt 26.10.2011 / 19:23
26

A única razão pela qual rm -r ./* nem sempre funciona é porque você pode ter arquivos ocultos e / ou pastas que não são correspondidos por * .

Para isso, bash fornece uma opção para fazer com que * corresponda a tudo, até mesmo objetos ocultos:

cd dont-delete-me
shopt -s dotglob
rm -r ./*

Pode ser útil redefinir dotglob para seu estado padrão (não definido), se você continuar usando o shell no qual executou os comandos acima:

shopt -u dotglob 
    
por enzotib 26.10.2011 / 19:33
20

Abra o terminal ( Ctrl + Alt + T ) e digite:

find somedir -mindepth 1 -delete

Isso corresponderá a todos os arquivos e diretórios dentro de somedir e seus (netos) filhos, incluindo os arquivos de pontos "ocultos", mas excluindo somedir por causa de -mindepth 1 e, em seguida, -delete .

    
por guciek 29.09.2012 / 13:48
6
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;

Use a opção xdev para excluir arquivos somente dentro do limite do dispositivo.

    
por Sergey 26.10.2011 / 19:36
4

Para excluir (no terminal) todos os arquivos e subdiretórios, exceto o diretório base chamado "dontdelete":

rm -rf dontdelete/*
    
por kyleN 26.10.2011 / 19:23
4

Você pode usar find com o sinalizador -delete :

find dontDeleteMe/* -delete

O /* é importante, pois diz find para pesquisar somente dentro da pasta chamada "dontDeleteMe".

Verifique também se o sinalizador -delete está no final do comando find .

    
por SaultDon 27.10.2011 / 04:09
3
rm -rf  directory/{.*,/*}

O que diz:

Remova todos os arquivos que começam com. em "diretório" e todos os outros arquivos também.

Ainda que gentilmente indicado por Neftas , esta solução não é segura!

A solução mais segura é:

 rm -rf directory/!(.|..)
    
por Tebe 14.04.2015 / 23:36
1

Eu não sei por que isso é tão complexo, me ajude se eu estiver errado

cd DoNotDeleteDir #<- this is just to make sure we are inside
find . | xargs rm -rf

É isso

    
por user353305 15.09.2015 / 15:17
1

Existe uma resposta ainda mais simples:

  1. cd dontDeleteMe

  2. rm -rf *

Tempo de aula de administração do sistema básico: Certifique-se de prestar atenção em onde você está quando usar comandos de varredura como esse.

Eu não posso dizer o suficiente. Eu tive que recuperar uma caixa porque alguém não estava prestando atenção e digitou rm -rf * enquanto em /.

* nix assume que, se você for root ou se estiver sudo-root como root, você sabe o que está fazendo. Portanto, certifique-se de que você sabe o que está fazendo antes de fazê-lo.

Uma alternativa que garante que seu comando 'cd' funcione antes de você emitir o 'rm' é usar

cd dontDeleteMe && rm -rf *
    
por user30619 26.10.2011 / 21:09
0
  1. A coisa mais fácil para mim - um especialista em janelas, mas um novato do ubuntu
  2. Clique no ícone Arquivos no iniciador
  3. Navegue até o diretório onde o estão localizados arquivos e pastas que você deseja excluir
  4. Clique com o botão direito em uma área em branco da janela ao lado dos arquivos e clique em "Abrir no Terminal" - deixe a janela Arquivos aberta
  5. Uma janela do terminal será aberta e será "definida" para a pasta que você localizou
  6. Você pode digitar "dir" (desconsidere aspas quando eu disser "type") e pressione enter para o terminal para mostrar uma lista de arquivos e pastas - apenas para provar que você está "na" pasta certa
  7. digite "rm -rf *" e pressione Enter
  8. dependendo do tamanho das pastas / arquivos para excluir o sistema fará uma pausa
  9. Quando o terminal retornar, a janela Arquivos que você abriu agora dirá "A pasta está vazia"
  10. Eu tive sucesso com esse método e me deu conforto ver os arquivos / pastas na janela Arquivos e como resultado do comando Dir na janela do terminal
  11. Também fiquei reconfortado que a janela Arquivos exibiu a pasta agora vazia - especialmente porque eu estava procurando esses arquivos em volta da pasta que eles estavam em
  12. Obrigado a todos que enviaram respostas - foi muito informativo
por William Saxon 08.11.2016 / 10:12