Maneira correta de excluir o conteúdo do diretório

Maneira correta de excluir o conteúdo do diretório

Qual é a maneira correta de excluirtodoso conteúdo de um diretório, sem esse diretório?
Por exemplo, tenho a seguinte estrutura de diretórios:

foo/
    bar1/
    bar2/
    x.txt

Quero excluir as pastas bar1e bar2o arquivo x.txt,sem excluir foo.

Considere também nomes de arquivos com caracteres especiais que podem ser ignorados ou gerar um erro.


Edição nº 1 (30 de setembro, 18:26 UTC):
Acho que minha pergunta não é uma duplicata deessa questão, porque eu pedi para deletartudodentro de um diretório, enquanto a outra pergunta não e as respostas não incluíam tal solução.

Responder1

Se você conhece o diretório, pode fazer isso usando um destes comandos:

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

Se você tiver arquivos que começam com um ponto ( .), precisará de uma versão modificada do rm.

$ rm -fr foo/{*,.*}

Exemplo

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

Repetindo com um novo diretório de arquivos:

$ find foo/* -delete
$

Lidando com caracteres especiais

Se você tiver um diretório nomeado foo tasticcom espaço, poderá citá-lo, mas ainda assim usar um curinga:

Exemplo

$ rm -fr "foo tastic"/*

Caracteres especiais

Freqüentemente usarei esse truque para ver o que o shell pensa das minhas misturas de nome de arquivo antes de executá-las. No diretório de exemplo que usei acima:

$ ls -1 "arquivo"* espaço de arquivo1 espaço de arquivo2

$ ls -1d "dir "* dir espaço1 dir espaço2

Ao fazer esses testes com antecedência, você pode ter uma noção de quais arquivos/diretórios estarão em jogo quando um comando contendo o glob for usado.

informação relacionada