Cómo eliminar todos los archivos devueltos por localizar


13

Por el momento lo que hago es suyo:

Paso 1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

Paso 2:

Realice manualmente una eliminación, copiando y pegando cada línea.

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

¿Cómo hago esto en un solo paso? Algo como

localizar fooBar> rm

Gracias.


¿Quieres esto? rm -i localizar fooBar ''
LFC_fan

No estoy seguro de lo que hace lo anterior. Solo quiero eliminar todos los archivos, de las rutas que se devuelven cuando ejecuto un comando de localización.
theTuxRacer

Respuestas:


13

Como los otros capítulos ya han mencionado, xargs es tu amigo. Es una herramienta realmente poderosa y trataré de explicarlo y proporcionar una solución para un problema común.

Lo que hace xargs es tomar una línea desde la entrada y agregarla a otro comando, ejecutando ese otro comando para cada línea en la entrada. Entonces, al escribir locate foobar | xargs rm -f, la salida del comando de localización se aplicará al final del rm -fcomando y se ejecutará para cada línea producida por locate foobar.

El gotcha:

Pero, ¿qué sucede si hay espacios en su (s) línea (s) devueltos por localizar? Eso interrumpirá el rm -fcomando porque los argumentos pasados ​​a rm deben ser archivos (a menos que use el modificador -r), y una ruta de archivo debe escaparse o citarse si contiene espacios.

xargs proporciona el modificador -i, para sustituir la entrada en el comando que sigue en lugar de simplemente agregarlo. Entonces cambiaría la sugerencia a

locate foobar | xargs -ixxx rm -f 'xxx'

que ahora solo se romperá si los nombres de archivo devueltos por localizar contenían apóstrofes.

Tengo que estar de acuerdo con qbi, que debes tener cuidado al usar rm -f ! Use el indicador -p para xargs, o simplemente ejecute el foobar de localización por sí mismo antes de alimentarlo a xargs, o suelte el -f desde rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'

99
Para ser robusto frente a archivos con caracteres exóticos (nuevas líneas, comillas, apóstrofes, etc.) en sus nombres, puede usar la opción -0( --null) para ubicar y xargs. Utiliza el carácter seguro ASCII NUL para separar los nombres de archivo:locate -0 foobar | xargs -0 rm
Jukka Matilainen

1
+1 para la respuesta, y seleccionado por mencionar el gotcha ^ _ ^
theTuxRacer

Lo intenté pero no funcionó.
Pronoy999

Trabajó parcialmente
SteveS

7

Quizás necesite más opciones para usar xargs. Pruébalo primero con xargs -p. Si está bien, elimine la -popción:

locate foobar | xargs rm

6

Para eliminar todos los archivos que devuelve localizar, emita el siguiente comando en su terminal

locate foobar | xargs rm -f

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.