web-dev-qa-db-fra.com

Résultats de tuyau de localiser dans la rm

J'ai essayé de courir

locate *.orig | xargs rm

mais il a dit No such file or directory

J'ai vu des façons de le faire avec find mais localiser renvoie le chemin complet de l'objet, ce qui devrait être possible

10
soldier.moth

Si les noms de fichiers contiennent des espaces, vous devez utiliser

locate -0 $something | xargs -0 rm

De 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 laisser pour localiser inaltéré.

20
enzotib

C'est xargs pas xarg

2
maco

La commande locate *.orig | xargs rm fonctionne, mais il se trouvait que locate cherchait *.orig fichiers dans la corbeille et rm crachait l'erreur No such file or directory en essayant. supprimer des fichiers dans la corbeille.

0
soldier.moth

localiser ne fait pas le globbing, mais le shell fait. Le shell étend * .orig à ce qu’il trouve dans le répertoire actuel qui correspond à * .orig.

Juste utiliser

locate .orig

et si cela vous apporte ce dont vous avez besoin

locate .orig | xargs rm

ou, comme mentionné par enzotib

locate -0 .orig | xargs -0 rm

si vous avez des espaces blancs dans les noms de fichiers.

0
user unknown

Une astuce: enregistrez tous les chemins dans un fichier tmp. alors, boucle 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 
0
Abdennour TOUMI