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, findmais 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, findmais 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 locatepage de manuel :
-0,--nullSé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 *.origavec des guillemets, pour éviter l'expansion du shell, et le transmettre pour le localiser intact.
| while readcar 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 locatela chaîne exacte ne sera pas vue *.origcomme il se doit.
                    tr '\n' '\0'.
                    Ce n'est xargspasxarg
La commande locate *.orig | xargs rmfonctionne réellement, mais ce qui se passait, c'est que la locaterecherche de *.origfichiers dans la poubelle et rmcrache l'erreur No such file or directorylors 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