Comment supprimer tous les fichiers renvoyés par Locate

13

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

localiser fooBar> rm

Merci.

theTuxRacer
la source
Tu veux ça? rm -i Locate fooBar ''
LFC_fan
Je ne sais pas ce que fait ce qui précède. Je veux juste supprimer tous les fichiers des chemins qui sont retournés lorsque j'exécute une commande de localisation.
theTuxRacer

Réponses:

13

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, c'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. Ainsi, en tapant locate foobar | xargs rm -f, la sortie de la commande Locate sera corrigée à la fin de la rm -fcommande 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 interrompra la rm -fcommande 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, pour remplacer l'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 devez faire attention à l'utilisation de 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 -f de rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'
finley
la source
9
Pour être robuste contre les fichiers avec des caractères exotiques (nouvelles lignes, guillemets, apostrophes, etc.) dans leurs noms, vous pouvez utiliser l' option -0( --null) pour localiser et xargs. Celui-ci utilise le caractère ASCII NUL sécurisé pour séparer les noms de fichiers:locate -0 foobar | xargs -0 rm
Jukka Matilainen
1
+1 pour la réponse, et sélectionné pour mentionner le gotcha ^ _ ^
theTuxRacer
J'ai essayé mais ça n'a pas marché.
Pronoy999
A travaillé partiellement
SteveS
7

Vous aurez peut-être besoin de plus d'options pour l'utiliser avec xargs. Testez-le d'abord avec xargs -p. Si c'est OK, supprimez l' -poption:

locate foobar | xargs rm
qbi
la source
6

Pour supprimer tous les fichiers renvoyés par Locate, exécutez la commande suivante dans votre terminal

locate foobar | xargs rm -f

karthick87
la source