Ubuntu – Comment supprimer tous les fichiers retournés par Locate

En ce moment, c’est ce que je fais:

Étape 1:

 locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
 

Étape 2:

Effectuez manuellement une suppression en copiant-collant chaque ligne.

 rm /home/abc/fooBar 
 rm /home/abc/Music/fooBar 

Comment faire cela en une seule étape? Quelque chose comme

locate fooBar > rm

Merci.

Meilleure réponse

  • Comme les autres gars l’ont déjà mentionné, xargs est votre ami. C’est un outil vraiment puissant et je vais essayer de l’expliquer et de fournir une solution de contournement pour un gotcha commun.

    Ce que fait xargs est de prendre une ligne de l’entrée et de l’ajouter à une autre commande, en exécutant cette autre commande pour chaque ligne de l’entrée. Donc en tapant locate foobar | xargs rm -f , la sortie de la commande Locate serapatché sur la findu rm -f et exécutée pour chaque ligne produite par locate foobar .

    Le gotcha:

    Mais que se passe-t-il s’il y a des espaces dans vos lignes retournés par Locate? Cela brisera la rm -f car les arguments passés à rm doivent être des fichiers (sauf si vous utilisez le commutateur -r), et un chemin de fichier doit être échappé ou cité s’il contient des espaces.

    xargs fournit le commutateur -i, pourremplacerl’entrée dans la commande qui suit au lieu de simplement l’ajouter. Je changerais donc la suggestion en

     locate foobar | xargs -ixxx rm -f 'xxx'
     

    qui ne se cassera désormais que si les noms de fichiers renvoyés par Locate contiennent des apostrophes.

    Je dois être d’accord avec qbi, que vous devriez êtreattention à l’utilisation rm -f!
    Utilisez l’indicateur -p pour xargs, ou exécutez simplement la barre de localisation par lui-même avant de l’alimenter en xargs, ou supprimez le -f de rm.

     locate foobar | xargs -p -ixxx rm -f 'xxx'