J'ai essayé de courir
locate *.orig | xargs rm
mais ça disait No such file or directory
J'ai vu des façons de le faire, find
mais Locate renvoie le chemin complet de l'objet, donc cela devrait être possible
J'ai essayé de courir
locate *.orig | xargs rm
mais ça disait No such file or directory
J'ai vu des façons de le faire, find
mais Locate renvoie le chemin complet de l'objet, donc cela devrait être possible
Réponses:
Si les noms de fichiers contiennent des espaces, vous devez les utiliser
locate -0 $something | xargs -0 rm
Depuis la locate
page de manuel :
-0
,--null
Séparez les entrées en sortie à l'aide du caractère ASCII NUL au lieu d'écrire chaque entrée sur une ligne distincte. Cette option est conçue pour l'interopérabilité avec l'option --null de GNU xargs (1).
ou
locate $something | while read f; do rm "$f"; done
En outre, vous devez protéger *.orig
avec des guillemets, pour éviter l'expansion du shell, et le transmettre pour le localiser intact.
| while read
car mon répertoire personnel est plein de fichiers avec des espaces.
*.orig
, le shell étendra le motif à, disons file1.orig file2.orig ...
, de sorte que locate
la chaîne exacte ne sera pas vue *.orig
comme il se doit.
tr '\n' '\0'
.
Ce n'est xargs
pasxarg
La commande locate *.orig | xargs rm
fonctionne réellement, mais ce qui se passait, c'est que la locate
recherche de *.orig
fichiers dans la poubelle et rm
crache l'erreur No such file or directory
lors de la tentative de suppression de fichiers dans la poubelle.
Locate ne fait pas le globbing, mais le shell le fait. Le shell étend * .orig à ce qu'il trouve dans le répertoire courant qui correspond à * .orig.
Utilisez simplement
locate .orig
et si cela vous donne ce dont vous avez besoin
locate .orig | xargs rm
ou, comme l'enzotib l'a mentionné
locate -0 .orig | xargs -0 rm
si vous avez des espaces dans les noms de fichiers.
Une astuce: enregistrez tous les chemins dans le fichier tmp. puis, bouclez dessus:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt