Estou tentando remover todos os arquivos de troca do vim *.swp
e removê-los com uma confirmação. O find
comando encontrou os arquivos, mas rm
diz No such file or directory
com a -i
opção. Quando codifico o caminho do arquivo e apenas uso rm -i
, parece funcionar.
Veja abaixo
(doors)hobbes3@hobbes3 ~/Sites $ find mysite mysite_BAK -name *.swp -exec 'rm -i {}' \;
find: rm -i mysite/templates/.base.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.create.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.detail.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.list.html.swp: No such file or directory
(doors)hobbes3@hobbes3 ~/Sites $ rm -i mysite/templates/.base.html.swp
remove mysite/templates/.base.html.swp? n
Acho que estou fazendo algo errado com a -exec
opção. Alguma sugestão? Desde já, obrigado!
Responder1
O erro é gerado porencontrar, nãorm.
A razão é que você escreveu, assim 'rm -i <file>'
como o argumento único. Isto deve ser reescrito:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
então find obtém vários argumentos após "-exec" e trata o primeiro como comando e os outros como argumentos de comando.
Responder2
RESPOSTA ATUALIZADA:
se você estiver usando a versão bash> 4.0, poderá usar o recurso globstar, é muito fácil:
shopt -s globstar
rm -i **/*.swp
Isso também funciona com nomes de arquivos que contêm espaços!
A shopt -s globstar
parte ativará a **
correspondência recursiva no bash. Você pode colocar isso no seu .bashrc
e ser feliz para todo o sempre.
RESPOSTA ANTIGA:
Geralmente acho mais fácil usar ferramentas simples combinadas
cd para dir e então:
rm -i `find . | grep .swp$`
é mais fácil de lembrar (se o desempenho não for um problema)!
Aviso: Use isto somente se seus nomes de arquivos não contiverem espaços.
Responder3
No seu caso, eu correria,
find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"
O arquivo de troca do VIM não termina apenas em .swp. Se .swp existir, o VIM criaria .swo, depois .swn e assim por diante. Além disso, os arquivos de troca são prefixados com um ponto (.), por exemplo, .file1.rb.swp
Outras maneiras de localizar e excluir arquivos de troca do VIM, sem a confirmação (-i):
find some_dir -type f -name .\*.sw? | xargs rm
find some_dir -type f -name .\*.sw? -exec rm {} ";"
find some_dir -type f -name .\*.sw? -delete # -delete option does not work in Git Bash
Sem "-type f", você receberia um erro ao excluir um diretório. Além disso, o \
in .\*.sw?
o torna compatível em múltiplas plataformas.