xargs - si la condition et l'echo {}
J'ai des fichiers qui contiennent un particulier des chaînes de caractères. Ce que je veux faire est, de rechercher un emplacement pour le fichier, si le fichier existe grep pour le motif; si la valeur est true, faire quelque chose.
find -iname file.xxx| xargs -I {} if grep -Fq "string" {} ; then echo {} ; fi
Les problèmes sont:
xargs
ne fonctionne pas avec l'instruction if.echo {}
ne donne pas le nom de fichier, au lieu de cela donne{}
.
Comment puis-je résoudre ces?
Pourquoi ne pas avoir
faire quelque chose sur le fichier ou grepped ligne?
find
exécuter grep
lui-même?faire quelque chose sur le fichier ou grepped ligne?
OriginalL'auteur Population Xplosive | 2012-02-28
Vous devez vous connecter pour publier un commentaire.
Essayez d'exécuter la commande par l'intermédiaire d'un interpréteur de commandes comme ceci:
où la commande d'origine a été entouré par des guillemets et
bash -c
.OriginalL'auteur jcollado
Envelopper le if dans un appel à sh:
Utiliser un tout-boucle au lieu de xargs
Je suppose que vous voulez faire plus que l'écho du nom de fichier. Si c'est tout ce que vous voulez faire, utilisez la commande grep est
-l
option:OriginalL'auteur glenn jackman
D'abord,
if
est un bash-commande et pas de programme exécutable.xargs
sur l'autre main a besoin d'un programme distinct.Deuxième, la
;
personnages sont probablement fractionnement de votre commande. Vous avez pour échapper à eux afin de les obtenir throu à xargs.Pour éviter tout cela, je suggère ce qui suit:
Bon point. Toujours se méfier des des espaces!
OriginalL'auteur Quota