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.
command-line
pipe
theTuxRacer
la source
la source
rm -i
Locate fooBar ''Réponses:
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 larm -f
commande et exécutée pour chaque ligne produite parlocate 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 -f
commande 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
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.
la source
-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
Vous aurez peut-être besoin de plus d'options pour l'utiliser avec
xargs
. Testez-le d'abord avecxargs -p
. Si c'est OK, supprimez l'-p
option:la source
Pour supprimer tous les fichiers renvoyés par Locate, exécutez la commande suivante dans votre terminal
locate foobar | xargs rm -f
la source