Intenté correr
locate *.orig | xargs rm
pero decía No such file or directory
He visto formas de hacerlo, find
pero localizar devuelve la ruta completa al objeto, por lo que debería ser posible
Intenté correr
locate *.orig | xargs rm
pero decía No such file or directory
He visto formas de hacerlo, find
pero localizar devuelve la ruta completa al objeto, por lo que debería ser posible
Respuestas:
Si los nombres de archivo contienen espacios, debe usar
locate -0 $something | xargs -0 rm
Desde la locate
página del manual :
-0
,--null
Separe las entradas en la salida utilizando el carácter ASCII NUL en lugar de escribir cada entrada en una línea separada. Esta opción está diseñada para la interoperabilidad con la opción --null de GNU xargs (1).
o
locate $something | while read f; do rm "$f"; done
Además, debe proteger *.orig
con comillas, para evitar la expansión del shell, y pasarla para ubicarla intacta.
| while read
porque mi directorio de inicio está lleno de archivos con espacios.
*.orig
, el shell expandirá el patrón, por ejemplo file1.orig file2.orig ...
, para que locate
no vea la cadena exacta *.orig
como debería.
tr '\n' '\0'
.
Es xargs
noxarg
El comando locate *.orig | xargs rm
funciona realmente, pero lo que estaba sucediendo era locate
encontrar *.orig
archivos en la papelera y rm
escupe el error No such file or directory
al intentar eliminar archivos en la papelera.
localizar no hace el engorde, pero el caparazón sí. El shell expande * .orig a lo que encuentra en el directorio actual que coincide con * .orig.
Solo usa
locate .orig
y si eso te da lo que necesitas
locate .orig | xargs rm
o, como mencionó enzotib
locate -0 .orig | xargs -0 rm
si tiene espacios en blanco en los nombres de archivo.
Un truco: guardar todas las rutas en el archivo tmp. entonces, bucle en él:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt