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.

theTuxRacer
fuente
¿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'
finley
fuente
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
qbi
fuente
6

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

locate foobar | xargs rm -f

karthick87
fuente