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 exemplo root) ou porque estão em uso (por exemplo, uma montagem GVFS).
Se você não adicionou -f(como em rm -rf something), obteria algo como:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
Nesse ponto, você pode abortar e provavelmente perceberá que executou o comando errado.
Sugestões da comunidade sobre como evitar esses acidentes
Nota: wiki da comunidade, todo mundo sinta-se à vontade para contribuir.
Para alguns arquivos, use a -iopção 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 a ./para evitar remover por engano um local diferente .:
$ cd something
$ rm -v ./*~
removed ‘./file~’
O acima foi para demonstrar o uso de ./. Se houver um subdiretório, é claro que você também pode usá-lo rm -v something/*~. Cuidado : não pense que rm ./.*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.
mv -b SOURCE DEST
Use find(possivelmente com grep) para visualizar se você deseja excluir recursivamente os arquivos selecionados. Você deve tentar fazer disso uma ocorrência rara, mas se precisar ...
findsem argumentos recursivamente lista todos os arquivos / diretórios no atual. Você deve tentar descobrir man findcomo torná-lo seletivo (um tesouro), mas se você não quiser se preocupar, basta usar o familiar greppara filtrar os arquivos que deseja excluir.
- Suponha que eu seja um hacker do kernel uber-l33t e me incomode com os poucos KBs de arquivos "exemplo" na minha árvore de origem; Eu quero excluir todos os arquivos que contêm isso no nome. Então eu digito
find | grep example, o que me dá esses 20 arquivos. Parece bom, então agora vou excluir os arquivos exatos, juntamente com a rm -vsaída detalhada mencionada anteriormente, via xargs:
encontrar | exemplo grep | xargs rm -v
o que me dá essa saída. Essa visualização evita problemas onde, digamos, você digita e digita em samplevez de example.
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 resultar xargsem falha ou alimentar rmcom 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 com findos operadores e ações.
A seguir, serão mostrados todos os arquivos que contêm a palavra example
find . -name "*example*"
Se essa lista for os arquivos que você deseja remover, use a -execação para passar os arquivos rm.
find . -name "*example*" -exec rm -v {} +
Consulte Usando o Find para obter mais ajuda sobre o uso find.