La commande grep
dispose de deux canaux d'informations. Le premier et le plus évident est bien sûr stdout
, où il envoie des correspondances qu'il trouve. Mais s'il trouve aucun correspond, il utilise également une valeur de sortie> 0 pour vous informer. Combiné avec l'option -q
(calme), vous pouvez l'utiliser comme une option plus intelligente pour find
:
$ find . -name '*.jar' -exec zgrep -sq BuildConfig {} \; -exec zip -d {} "*/BuildConfig.class" \;
Cela suppose que vous voulez rechercher dans le fichier compressé à l'aide grep -Z
, bien sûr. :)
Ou pour faciliter la lecture:
find . -name '*.jar' \
-exec zgrep -sq BuildConfig {} \; \
-exec zip -d {} "*/BuildConfig.class" \;
Recherche fonctionne en exécutant chaque test en ordre. Vous pouvez considérer les options comme une série de filtres; l'option -name
est les premiers filtres, et un fichier n'est transmis à la seconde -exec
si le -exec
précédent s'est terminé sans erreurs.
Pertinent: https://stackoverflow.com/q/9612090/1531971 – jdv
'RESULTPATH' est-il destiné à être" chacun des fichiers identifiés par la commande 'find'"? En outre, un fichier '.jar' est un zip. Voulez-vous dire 'grep -z'? En outre, ce qui est avec les citations sur votre ligne 'zip'? – ghoti
oui, l'emplacement du chemin de résultat doit correspondre aux chemins trouvés par la commande find. Les guillemets sont manquants – user269721