Eu sei que isso excluirá tudo em um subdiretório e abaixo dele:
rm -rf <subdir-name>
Mas como você exclui tudo no diretório atual, bem como todos os subdiretórios abaixo dele e o conteúdo de todos esses subdiretórios?
Eu sei que isso excluirá tudo em um subdiretório e abaixo dele:
rm -rf <subdir-name>
Mas como você exclui tudo no diretório atual, bem como todos os subdiretórios abaixo dele e o conteúdo de todos esses subdiretórios?
Respostas:
Pratique computação segura. Basta subir um nível na hierarquia e não usar uma expressão curinga:
cd ..; rm -rf -- <dir-to-remove>
Os dois travessões --
indicam rm
que <dir-to-remove>
não é uma opção de linha de comando, mesmo quando começa com um travessão.
rm ./
pode digitar acidentalmente, o rm . /
que pode ser um desastre.
Irá deletar todos os arquivos / diretórios abaixo do atual.
find -mindepth 1 -delete
Se você quiser fazer o mesmo com outro diretório cujo nome você tem, basta nomear esse
find <name-of-directory> -mindepth 1 -delete
Se você deseja remover não apenas os subdiretórios e arquivos, mas também o próprio diretório, omita -mindepth 1
. Faça isso sem o -delete
para obter uma lista das coisas que serão removidas.
-mindepth 1
se estiver especificando um diretório ( find <name-of-directory> -mindepth 1 -delete
). Caso contrário, Johannes está certo, ele não excluirá o diretório de trabalho atual (ao usar find -delete
).
find -mindepth 1 -delete
mas consegui, illegal option -- m
mas funcionou muito bem quando removi a opção mindepth find . -delete
O que eu sempre faço é digitar
rm -rf *
e então pressione ESC- * , e o bash irá expandir o * para uma lista explícita de arquivos e diretórios no diretório de trabalho atual.
Os benefícios são:
Na verdade, gosto tanto disso que tornei o comportamento padrão para TAB com esta linha em .bashrc:
bind TAB:insert-completions
--
nesta resposta? Essa abordagem é incrível no geral, devo dizer.
Usar
rm -rf *
Update: O .
significa diretório atual, mas não podemos usar isso. O comando parece ter verificações explícitas para .
e ..
. Em vez disso, use o caractere curinga. Mas isso pode ser arriscado.
Uma versão mais segura do IMO é usar:
rm -ri *
(isso solicita uma confirmação antes de excluir todos os arquivos / diretórios.)
É correto rm –rf .
remover tudo no atual diretamente, incluindo quaisquer subdiretórios e seu conteúdo. O único ponto ( .
) significa o diretório atual. tome cuidado para não fazer isso, rm -rf ..
pois o ponto duplo ( ..
) significa o diretório anterior.
Dito isso, se você é como eu e tem várias janelas de terminal abertas ao mesmo tempo, é melhor estar seguro e usar rm -ir .
Vejamos os argumentos do comando para entender o porquê.
Primeiro, se você olhar a rm
página do manual do comando ( man rm
na maioria dos Unix), você notará que –r
significa "remover o conteúdo dos diretórios recursivamente". Então, fazer rm -r .
sozinho excluiria tudo no diretório atual e tudo abaixo dele.
No rm –rf .
adicionado -f significa "ignorar arquivos inexistentes, nunca solicitar". Esse comando exclui todos os arquivos e diretórios no diretório atual e nunca solicita que você confirme se realmente deseja fazer isso. -f
é particularmente perigoso se você executar o comando com um usuário com privilégios, já que pode excluir o conteúdo de qualquer diretório sem ter a chance de ter certeza de que é realmente o que deseja.
Por outro lado, rm -ri .
no -i
que substitui os -f
meios "prompt antes de qualquer remoção". Isso significa que você terá a chance de dizer "ops! Não é isso que eu quero" antes que o rm exclua todos os seus arquivos.
Em meus primeiros dias de administrador de sistemas, eu fiz um rm -rf /
em um sistema enquanto estava conectado com todos os privilégios (root). O resultado foi dois dias passados restaurando o sistema dos backups. É por isso que agora emprego rm -ri
.
certifique - se de que está no diretório correto
rm -rf *
Acredito que esta resposta seja melhor:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Se seu diretório de nível superior for chamado
images
, executerm -r images/*
. Isso usa o operador shell glob*
para executarrm -r
em cada arquivo ou diretório dentro de imagens.
basicamente você sobe um nível e, em seguida, diz delete tudo dentro do diretório X. Desta forma, você ainda está especificando qual pasta deve ter seu conteúdo excluído, o que é mais seguro do que apenas dizer 'exclua tudo aqui ", enquanto preserva a pasta original, (que às vezes você deseja porque não tem permissão ou simplesmente não quer para modificar as permissões existentes da pasta)