O gedit cria arquivos de backup ocultos que terminam com '~'. Eu queria fazer uma limpeza recursiva da minha árvore de diretórios.
O comando rm *~
excluirá todos os arquivos locais que terminam com '~'
Eu pensei que rm -r *~ .
iria excluir todos os arquivos em toda a árvore, mas eu digitei rm -r ~
.
Havia uma mensagem de que algum diretório não pôde ser excluído e fechei o comando. A pergunta é: O que eu tenho excluído?
Notei que minha configuração do Filezilla havia desaparecido. Este comando exclui todos os diretórios ocultos do diretório inicial?
command-line
bash
GUI Junkie
fonte
fonte
-r
menos que queira me livrar de tudo.rm -r *~ .
excluiria todos os arquivos e pastas (no diretório atual) correspondentes*~
ou.
. (.
seria ignoradorm
como uma exceção especial, pois a maioria das pessoas não deseja excluir recursivamente o diretório atual.*~
Exclui todos os arquivos e diretórios no diretório atual que terminam em~
, mas não os arquivos e diretórios nos subdiretórios do diretório atual. ) Portanto, não é isso que você gostaria. Você provavelmente desejaria usarfind
com o-exec
sinalizador para examinar recursivamente a árvore de diretórios e excluir não recursivamente cada arquivo que termina em~
.~
personagem sem sair dele (assim\~
:) fará com que Bash, ZSH, etc. (orm
comando basicamente) pense que você quer dizer o diretório inicial.Respostas:
Você excluiu (quase) todo o seu diretório pessoal!
rm -r something
exclui recursivamente arquivos e diretórios em / sob algo ; ele falhará apenas nos itens que não têm permissão para excluir, porque eles pertencem a um usuário diferente (por exemploroot
) ou porque estão em uso (por exemplo, uma montagem GVFS).Se você não adicionou
-f
(como emrm -rf something
), obteria algo como:Nesse ponto, você pode abortar e provavelmente perceberá que executou o comando errado.
Sugestões da comunidade sobre como evitar esses acidentes
Para alguns arquivos, use a
-i
opção para obter uma confirmação sobre a remoção de arquivos ou diretórios:Se estiver removendo de um diretório atual, prefixe-o com a
./
para evitar remover por engano um local diferente .:O acima foi para demonstrar o uso de
./
. Se houver um subdiretório, é claro que você também pode usá-lorm -v something/*~
. Cuidado : não pense querm ./.*
remove todos os arquivos ocultos no diretório atual. Consulte esta questão sobre a falha do servidor para obter soluções alternativas em arquivos ocultos.Mover em vez de excluir: em vez de excluir arquivos recursivamente, em primeiro lugar, me acostumei a mover os arquivos dos quais quero me livrar de outro lugar antes de excluí-los finalmente. Se algo der errado, é fácil restaurar.
Use
find
(possivelmente comgrep
) para visualizar se você deseja excluir recursivamente os arquivos selecionados. Você deve tentar fazer disso uma ocorrência rara, mas se precisar ...find
sem argumentos recursivamente lista todos os arquivos / diretórios no atual. Você deve tentar descobrirman find
como torná-lo seletivo (um tesouro), mas se você não quiser se preocupar, basta usar o familiargrep
para filtrar os arquivos que deseja excluir.find | grep example
, o que me dá esses 20 arquivos. Parece bom, então agora vou excluir os arquivos exatos, juntamente com arm -v
saída detalhada mencionada anteriormente, viaxargs
: o que me dá essa saída. Essa visualização evita problemas onde, digamos, você digita e digita emsample
vez deexample
.A solução acima não deve ser usada se você tiver nomes de arquivos que contenham espaços, caracteres de tabulação, novas linhas ou aspas (
"
ou'
), pois isso pode resultarxargs
em falha ou alimentarrm
com nomes de arquivos incompletos, que na pior das hipóteses podem acabar removendo o erro errado. arquivos. A maneira segura de fazer o acima é fazer tudo comfind
os operadores e ações.A seguir, serão mostrados todos os arquivos que contêm a palavra
example
Se essa lista for os arquivos que você deseja remover, use a
-exec
ação para passar os arquivosrm
.Consulte Usando o Find para obter mais ajuda sobre o uso
find
.fonte
find
saída da tubulação paragrep
exargs rm
é perigosa.mv
(meu comando favorito);)find
da maneira segura, uma que não quebre (e potencialmente exclua os arquivos errados) se os nomes de arquivos contiverem espaço, guia, nova linha"
ou'
caracteres. Por exemplofind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
tão perigoso? Eu teria dito algo aqui, mas não sei outro além do que foi encontrado recentemente e limpou o meu,/
apesar de uma execução a seco sem a opção,-delete
encontrei apenas alguns arquivos que eu queria remover. Vejo que você recomenda-exec rm
.-delete
não é perigoso, e você pode usá-lo com segurança em vez de-exec rm {} +
. Geralmente, prefiro usar ferramentas e recursos padrão sempre que possível.-delete
é uma extensão GNU não-padrão parafind
, portanto funcionará bem no Ubuntu, mas pode não em outros sistemas.Sim. Um caractere til sem aspas como argumento separado é expandido para o seu homedir. Então
rm -r ~
foi expandido pararm -r /home/yourusename
. Então você disse à rm para excluir recursivamente todos os arquivos em sua casa.Consulte http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion para obter mais informações sobre como funciona a expansão til.
fonte