Remove todos os arquivos desfazer Vim em todos os diretórios, exceto um

6

Acabei de perceber que tenho toneladas de arquivos desfazer Vim ( .un~ ) espalhados pelo meu sistema de arquivos. Gostaria de excluir todos esses arquivos, exceto em um diretório - ~/.tmp . Meu primeiro problema é que não consigo encontrar um comando Unix para excluir essas coisas. Por exemplo, eu tenho um nome de arquivo que se parece com isso:

.myfile.txt.un~

Eu tentei, rm -f *.un , rm -f *.un\~ , rm -f *.un* , etc. e não consigo encontrar nenhum comando que possa excluir esses arquivos. Como posso excluir esses arquivos?

Em segundo lugar, gostaria de escrever um comando com find que possa visitar todos os meus diretórios e excluir esses arquivos, com exceção do diretório ~/.tmp . Tenho muito medo de executar este comando, caso esteja errado. Alguém pode ajudar a construir um comando de busca para fazer isso? Agradecemos antecipadamente pela ajuda!

    
por turtle 27.02.2013 / 16:58

2 respostas

5

Esses comandos não funcionaram porque os padrões de curingas omitem arquivos de ponto (arquivos cujo nome começa com o caractere . ) a menos que o ponto apareça explicitamente no padrão. Portanto, *.un~ corresponde a yourfile.txt.un~ , mas não .myfile.txt.un~ , enquanto .*.un~ corresponde a .myfile.txt.un~ .

Você deve ser capaz de usar find(1) para isso ( find de correspondência de caractere curinga não trata especialmente os arquivos de ponto):

find / -name "*.un~" -not -path "~/.tmp/*" -delete

Isso diz ao find para pesquisar / para todos os arquivos correspondentes a *.un~ que não estão em ~/.tmp e excluí-los. Se você retirar -delete , ele exibirá uma lista, para que você possa verificar e certificar-se de que não irá excluir as coisas erradas. Você também pode querer jogar -mount lá para impedir que ele procure em outros sistemas de arquivos que você montou

    
por 27.02.2013 / 17:09
4

* não expande os arquivos de ponto. Você terá que dizer, por exemplo:

rm ./.*.un~

Se você usa find , que provavelmente seria o mais fácil, eu usaria

find -iname ".*.un~" ...

em vez de:

find -iname "*.un~" ...

Como este último corresponderia a foo.un~ , bem como .foo.un~ .

E, sim, faça uma corrida seca primeiro para ter certeza de que você tem as correspondências corretas.

    
por 27.02.2013 / 17:46