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.
command-line
pipe
theTuxRacer
fuente
fuente
rm -i
localizar fooBar ''Respuestas:
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 delrm -f
comando y se ejecutará para cada línea producida porlocate foobar
.El gotcha:
Pero, ¿qué sucede si hay espacios en su (s) línea (s) devueltos por localizar? Eso interrumpirá el
rm -f
comando 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
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.
fuente
-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
Quizás necesite más opciones para usar
xargs
. Pruébalo primero conxargs -p
. Si está bien, elimine la-p
opción:fuente
Para eliminar todos los archivos que devuelve localizar, emita el siguiente comando en su terminal
locate foobar | xargs rm -f
fuente