GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je inclure un tuyau | dans ma commande linux find -exec ?

Le travail d'interprétation du symbole pipe comme une instruction pour exécuter plusieurs processus et diriger la sortie d'un processus vers l'entrée d'un autre processus est de la responsabilité du shell (/bin/sh ou équivalent).

Dans votre exemple, vous pouvez soit choisir d'utiliser votre coque de niveau supérieur pour effectuer la tuyauterie comme suit :

find -name 'file_*' -follow -type f -exec zcat {} \; | agrep -dEOE 'grep'

En termes d'efficacité, ce résultat coûte une invocation de find, de nombreuses invocations de zcat et une invocation d'agrep.

Cela entraînerait la création d'un seul processus agrep qui traiterait toute la sortie produite par de nombreuses invocations de zcat.

Si, pour une raison quelconque, vous souhaitez invoquer agrep plusieurs fois, vous pouvez :

find . -name 'file_*' -follow -type f \
    -printf "zcat %p | agrep -dEOE 'grep'\n" | sh

Cela construit une liste de commandes utilisant des tubes à exécuter, puis les envoie à un nouveau shell pour être réellement exécutées. (Omettre le "| sh" final est un bon moyen de déboguer ou d'effectuer des simulations de lignes de commande comme celle-ci.)

En termes d'efficacité, ce résultat coûte une invocation de find, une invocation de sh, de nombreuses invocations de zcat et de nombreuses invocations d'agrep.

La solution la plus efficace en termes de nombre d'invocations de commandes est la suggestion de Paul Tomblin :

find . -name "file_*" -follow -type f -print0 | xargs -0 zcat | agrep -dEOE 'grep'

... qui coûte une invocation de find, une invocation de xargs, quelques invocations de zcat et une invocation d'agrep.


la solution est simple :exécutez via sh

... -exec sh -c "zcat {} | agrep -dEOE 'grep' " \;

Linux
  1. Comment rechercher des fichiers avec la commande fd sous Linux

  2. Comment utiliser la commande Linux find pour rechercher des fichiers

  3. Commande Linux :Comment "trouver" uniquement des fichiers texte ?

  4. Comment diriger les résultats de 'find' vers mv sous Linux

  5. Comment puis-je trouver ma version de shell à l'aide d'une commande Linux ?

Comment trouver une adresse IP sous Linux

Comment trouver le nom d'hôte sous Linux

Comment exécuter plusieurs commandes Linux en une seule commande

Comment rechercher des fichiers avec la commande fd sous Linux

Comment trouver une adresse IP dans la ligne de commande Linux

Comment trouver des dossiers sous Linux