Estoy intentando eliminar todos los archivos de intercambio de vim *.swp
y eliminarlos con una confirmación. El find
comando encontró los archivos, pero rm
dice No such file or directory
con la -i
opción. Cuando codifico la ruta del archivo y simplemente rm -i
lo uso, parece funcionar.
Vea abajo
(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
Supongo que estoy haciendo algo mal con la -exec
opción. ¿Alguna sugerencia? ¡Gracias de antemano!
Respuesta1
El error es generado porencontrar, nohabitación.
La razón es que usted lo ha escrito, por lo que 'rm -i <file>'
es el único argumento. Esto se reescribirá:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
entonces find obtiene múltiples argumentos después de "-exec" y trata el primero como comando y los demás como argumentos del comando.
Respuesta2
RESPUESTA ACTUALIZADA:
Si estás usando la versión >4.0 de bash, puedes usar la función globstar, es muy fácil:
shopt -s globstar
rm -i **/*.swp
¡Esto también funciona con nombres de archivos que contienen espacios!
La shopt -s globstar
parte activará la **
coincidencia recursiva en bash. Puedes poner esto en tu .bashrc
y ser feliz por siempre jamás.
ANTIGUA RESPUESTA:
Generalmente me resulta más fácil usar herramientas simples combinadas.
cd a dir y luego:
rm -i `find . | grep .swp$`
¡Es más fácil de recordar (si el rendimiento no es un problema)!
Advertencia: utilice esto únicamente si los nombres de sus archivos no contienen espacios.
Respuesta3
En tu caso yo correría
find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"
El archivo de intercambio de VIM no sólo termina en .swp. Si existe .swp, VIM creará .swo, luego .swn, y así sucesivamente. Además, los archivos de intercambio tienen el prefijo un punto (.), por ejemplo, .file1.rb.swp.
Otras formas de buscar y eliminar archivos de intercambio de VIM, sin la confirmación (-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
Sin "-type f", obtendría un error al eliminar un directorio. Además, lo \
hace .\*.sw?
compatible en múltiples plataformas.