Como remover arquivos e diretórios rapidamente via terminal (bash shell) [fechado]

331

Da janela do terminal:

Quando eu uso o rmcomando, ele pode remover apenas arquivos.
Quando uso o rmdircomando, ele remove apenas pastas vazias.

Se eu tiver um diretório aninhado com arquivos e pastas em pastas com arquivos e assim por diante, existe alguma maneira de excluir todos os arquivos e pastas sem que todo o comando extenuante seja digitado?

Se isso faz diferença, estou usando o mac bash shell do terminal, não o Microsoft DOS ou o linux.

baduker
fonte
Caso você deseje restaurar os arquivos no futuro, não use "rm" nesses casos. Use "rm-trash": github.com/nateshmbhat/rm-trash
Natesh bhat

Respostas:

760
rm -rf some_dir

-r "recursivo" -f "força" (suprimir mensagens de confirmação)

Seja cuidadoso!

Jim Lewis
fonte
26
+1 e feliz por você ter adicionado o "Cuidado!" parte ... definitivamente um comando "Sawzall" que pode rapidamente transformar um bom dia em um mau. se usado com cuidado.
itsmatt
5
como não fazer "# rm -rf /" você vai se arrepender disso:
DarthVader
1
@itsmatt: Você sabe o que eles dizem ... dê a alguém um Sawzall, e de repente todo problema parece horas de diversão!
Jim Lewis
164
Em um Mac? Faça o seguinte: brew install trashentão trash -rf some_dirIsso moverá o diretório indesejado para a lixeira, em vez de apenas desaparecer o estilo Prestige para o éter. ( source )
zakdances
4
A abordagem do "lixo" é ótima!
anopres 17/03/2014
59
rm -rf *

Removeria tudo (pastas e arquivos) no diretório atual.

Mas tenha cuidado! Somente execute este comando se tiver certeza absoluta de que está no diretório certo.

Prine
fonte
17
rm -rf é um comando muito arriscado, você deve sempre ter cuidado e especificar a pasta a ser excluída.
eomeroff
8
Como sobre a execução ls -R *primeiro para ver o que será deletado porrm -rf *
Hammad Khan
Isso funciona bem para mim, obrigado.
Monica Hübner
14

Sim existe. A -ropção diz rmser r ecursive, e remover toda a hierarquia de arquivos raiz em seus argumentos; em outras palavras, se for fornecido um diretório, ele removerá todo o seu conteúdo e executará o que é efetivamente um rmdir.

As outras duas opções que você deve saber são -ie -f. -isignifica i Nteractive; ele rmavisa antes de excluir todos os arquivos. -fsignifica f orce; segue em frente e exclui tudo sem perguntar. -ié mais seguro, mas -fé mais rápido; use-o apenas se tiver certeza absoluta de que está excluindo a coisa certa. Você pode especificá-los com -rou não; é um cenário independente.

E, como sempre, você pode combinar interruptores: rm -r -ié justo rm -rie rm -r -fé rm -rf.

Observe também que o que você está aprendendo se aplica a bashtodos os sistemas operacionais Unix: OS X, Linux, FreeBSD etc. Na verdade, rma sintaxe é a mesma em praticamente todos os shell de todos os sistemas operacionais Unix. O OS X, sob o capô, é realmente um sistema BSD Unix.

Antal Spector-Zabusky
fonte
1
Embora todas as opções mencionadas acima sejam padrão entre todos os sabores Unix listados, também existem algumas diferenças. Por exemplo, o OS X (mas não o Linux) possui "rm -d", o que remove arquivos ou diretórios vazios. Ainda assim, +1 para o ponto em que o OS X é BSD internamente.
precisa saber é o seguinte
Verdadeiro --- é garantido que o subconjunto POSIX funcione de forma consistente no Unixen, mas qualquer coisa fora disso pode ou não.
Antal Spector-Zabusky
2

Então, eu estava procurando em toda parte uma maneira de remover todos os arquivos em um diretório, exceto alguns diretórios e arquivos que eu queria manter por aí. Depois de muita pesquisa, criei uma maneira de fazer isso usando o find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

Essencialmente, ele usa regex para selecionar os diretórios a serem excluídos dos resultados e remove os arquivos restantes. Só queria colocá-lo aqui caso alguém mais precisasse.

msantoro12
fonte