Intenté correr
locate *.orig | xargs rm
pero decía No such file or directory
He visto formas de hacerlo, findpero 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, findpero 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 locatepágina del manual :
-0,--nullSepare 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 *.origcon comillas, para evitar la expansión del shell, y pasarla para ubicarla intacta.
| while readporque 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 locateno vea la cadena exacta *.origcomo debería.
tr '\n' '\0'.
Es xargsnoxarg
El comando locate *.orig | xargs rmfunciona realmente, pero lo que estaba sucediendo era locateencontrar *.origarchivos en la papelera y rmescupe el error No such file or directoryal 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