![Maneira correta de excluir o conteúdo do diretório](https://rvso.com/image/50569/Maneira%20correta%20de%20excluir%20o%20conte%C3%BAdo%20do%20diret%C3%B3rio%20.png)
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 bar1
e bar2
o 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 tastic
com 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.