Você excluiu (quase) todo o seu diretório pessoal!
rm -r something
recursivamente exclui arquivos e diretórios em / sob algo ; ela falhará somente nos itens que ela não tem permissão para excluir, porque eles pertencem a um usuário diferente (por exemplo, root
) ou porque estão em uso (por exemplo, uma montagem GVFS).
Se você não adicionou -f
(como em rm -rf something
), você receberia algo como:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
Neste momento você pode abortar e você provavelmente perceberá que executou o comando errado.
Sugestões da comunidade sobre como evitar esses acidentes
Nota: wiki da comunidade, todos por favor sintam-se à vontade para contribuir.
-
Para alguns arquivos, use a opção
-i
para obter uma confirmação sobre a remoção de arquivos ou diretórios:$ rm -ri something/ rm: remove regular file ‘something/file~’? y rm: descend into directory ‘something’? y rm: remove regular file ‘something/file’? y rm: remove directory ‘something’? y
-
Se estiver removendo de um diretório atual, prefixe-o com um
./
para evitar remover erroneamente um local diferente.$ cd something $ rm -v ./*~ removed ‘./file~’
O acima foi para demonstrar o uso de
./
. Se houver um subdiretório, você também poderá usarrm -v something/*~
. Cuidado : não pense querm ./.*
remove todos os arquivos ocultos no diretório atual. Veja esta pergunta sobre o Serverfault para obter soluções alternativas para a globalização de arquivos ocultos. -
Mover em vez de excluir: Em vez de excluir arquivos recursivamente, em primeiro lugar, me acostumei a mover os arquivos que eu quero remover em algum outro lugar antes de apagá-los. Se algo deu errado, é fácil restaurá-lo.
mv -b SOURCE DEST
-
Use
find
(possivelmente comgrep
) para visualizar se desejar excluir recursivamente os arquivos selecionados. Você deve tentar tornar isso uma ocorrência rara, mas se você tiver que ...-
find
sem argumentos lista recursivamente todos os arquivos / diretórios sob o atual. Você deve tentar procurarman find
em como torná-lo seletivo (um tesouro), mas se você não quiser se incomodar, basta usar o familiargrep
para filtrar os arquivos que deseja excluir. - Suponha que eu seja um hacker de kernel do uber-l33t, e estou incomodado com os poucos KBs de arquivos de "exemplo" na minha árvore de fontes; Eu quero excluir todos os arquivos que contenham isso no nome. Então eu digito
find | grep example
, o que me dá esses 20 arquivos. Isso parece bom, então eu vou agora e excluo esses arquivos exatos , juntamente com a saída detalhadarm -v
mencionada anteriormente, viaxargs
:find | grep example | xargs rm -v
o que me dá esta saída. Essa visualização evita problemas, digamos, você comete um erro de digitação e digitasample
em vez deexample
.
-
A solução acima não deve ser usada se você tiver nomes de arquivos contendo espaços, caracteres de tabulação, novas linhas ou citações ( "
ou '
), pois isso levará xargs
a falhar ou feed rm
com nomes de arquivos incompletos, que no pior dos casos pode acabar removendo os arquivos errados. A maneira segura de fazer o que foi dito acima é fazer tudo isso com os operadores e ações do find
.
O seguinte mostrará todos os arquivos que contenham a palavra example
find . -name "*example*"
Se essa lista for os arquivos que você deseja remover, use a ação -exec
para passar os arquivos para rm
.
find . -name "*example*" -exec rm -v {} +
Veja Usando o Find para obter mais ajuda sobre como usar find
.