find et awk

Le
Stan
Bonjour,

j'aimerai reformater une liste de fichiers renvoyée
par find, dans l'esprit ça ressseblerai à ça :
> find / -name "*.txt" -exec echo {} | awk ' { print }' ;

évidemment, sous cette forme, ça ne marche pas.

Quelle est la forme canonique pour parvenir au bon résultat
( en passant par l'option -exec et non pas par un pipe après le find ) ?

Merci.

--
-Stan
Vos réponses Page 1 / 2
Trier par : date / pertinence
Marc Mezzarobba
Le #703404
find / -name "*.txt" -exec echo {} | awk ' { print }'  ;


Euh, c'est quoi la différence entre ça et la même chose en enlevant tout
le -exec ? À mois que « find [...] -exec sh -c '...' ; » ne réponde à ta
question ?

--
Marc Mezzarobba

JustMe
Le #703403
Stan a écrit
Bonjour,

j'aimerai reformater une liste de fichiers renvoyée


Reformater ? Comment ?

par find, dans l'esprit ça ressseblerai à ça :
find / -name "*.txt" -exec echo {} | awk ' { print }' ;



Là je comprend rien ;-)


évidemment, sous cette forme, ça ne marche pas.


M'etonne pas :-D


Quelle est la forme canonique pour parvenir au bon résultat


C'est quoi le "bon resultat" pour toi ?

( en passant par l'option -exec et non pas par un pipe après le find ) ?

Merci.



Olivier Miakinen
Le #703288

j'aimerai reformater une liste de fichiers renvoyée
par find, dans l'esprit ça ressseblerai à ça :
find / -name "*.txt" -exec echo {} | awk ' { print }' ;


évidemment, sous cette forme, ça ne marche pas.


Je suppose qu'il y a autre chose qu'un simple print dans le script awk,
mais que tu as simplifié l'exemple.

Bon, déjà, il faut terminer le -exec de la commande find (par ;) avant
de rediriger sa sortie standard vers l'entrée standard d'une autre.

Donc :
find . -exec echo {} ; | awk ' { print }'

Maintenant, note qu'il y a plus simple que « -exec echo {} ; », c'est
le « -print » :
find . -print | awk ' { print }'

Enfin, certaines versions de find ont un « -print » par défaut en
l'absence de toute autre commande, ce qui donne :
find . | awk ' { print }'

Quelle est la forme canonique pour parvenir au bon résultat
( en passant par l'option -exec et non pas par un pipe après le find ) ?


Rhâzut, je n'avais pas lu l'intérieur des parenthèses. Désolé. Alors tu
peux passer par un script externe qui contiendra le « | » ; je ne pense
pas qu'il existe une autre solution.

--
Olivier Miakinen


Matthieu Moy
Le #703287
Olivier Miakinen
Rhâzut, je n'avais pas lu l'intérieur des parenthèses. Désolé. Alors tu
peux passer par un script externe qui contiendra le « | » ; je ne pense
pas qu'il existe une autre solution.


Oui, ça a déjà été mentionné :

find . -exec sh -c "foo | bar" ;

--
Matthieu

Paul Gaborit
Le #703286
À (at) Thu, 26 Oct 2006 09:46:55 +0200,
Matthieu Moy
Olivier Miakinen
Rhâzut, je n'avais pas lu l'intérieur des parenthèses. Désolé. Alors tu
peux passer par un script externe qui contiendra le « | » ; je ne pense
pas qu'il existe une autre solution.


Oui, ça a déjà été mentionné :

find . -exec sh -c "foo | bar" ;


Certes... mais comment insérer le nom du fichier courant dans la
commande sh ?

Évidemment, ceci *ne* *marche* *pas* (le {} n'est pas remplacé):

find . -exec sh -c "foo | bar {}" ;

--
Paul Gaborit -

Olivier Miakinen
Le #703285

Oui, ça a déjà été mentionné :

find . -exec sh -c "foo | bar" ;


Certes... mais comment insérer le nom du fichier courant dans la
commande sh ?

Évidemment, ceci *ne* *marche* *pas* (le {} n'est pas remplacé):

find . -exec sh -c "foo | bar {}" ;


$ cat foobar
foo | bar $1
$ find . -exec ./foobar {} ;


Matthieu Moy
Le #703284
Paul Gaborit
Certes... mais comment insérer le nom du fichier courant dans la
commande sh ?


Arf, c'est une FAQ, ça ;-)

Évidemment, ceci *ne* *marche* *pas* (le {} n'est pas remplacé):

find . -exec sh -c "foo | bar {}" ;


find . -exec sh -c 'echo "$0"' {} ;

De mémoire, il peut y avoir des problèmes de portabilités, certains sh
ne prennant pas $0 de la même façon. La solution portable a deux "{}"
après le bout de script, mais je préfère ne pas la citer de mémoire
pour éviter d'écrire une connerie ;-).

--
Matthieu

JustMe
Le #703283
Matthieu Moy a écrit
Paul Gaborit
Certes... mais comment insérer le nom du fichier courant dans la
commande sh ?


Arf, c'est une FAQ, ça ;-)

Évidemment, ceci *ne* *marche* *pas* (le {} n'est pas remplacé):

find . -exec sh -c "foo | bar {}" ;


find . -exec sh -c 'echo "$0"' {} ;

De mémoire, il peut y avoir des problèmes de portabilités, certains sh
ne prennant pas $0 de la même façon. La solution portable a deux "{}"
après le bout de script, mais je préfère ne pas la citer de mémoire
pour éviter d'écrire une connerie ;-).


C'est pas plutot "$@" ?


Stan
Le #703282
"Olivier Miakinen" 45406391$
Enfin, certaines versions de find ont un « -print » par défaut en
l'absence de toute autre commande, ce qui donne :
find . | awk ' { print }'

Quelle est la forme canonique pour parvenir au bon résultat
( en passant par l'option -exec et non pas par un pipe après le find ) ?


Rhâzut, je n'avais pas lu l'intérieur des parenthèses. Désolé. Alors tu
peux passer par un script externe qui contiendra le « | » ; je ne pense
pas qu'il existe une autre solution.



En fait, je pensais que l'utilisation du "-exec" du find
simplifierai peut être la lecture de mes scripts, mais
ce n'ai pas le cas ( comparé à un un pipe vers awk ).
Je pensais être passé à côté de qq chose, mais non ;-)

Merci pour vos remarques

--
-Stan


Paul Gaborit
Le #703281
À (at) Thu, 26 Oct 2006 11:17:04 +0200,
Olivier Miakinen

Oui, ça a déjà été mentionné :

find . -exec sh -c "foo | bar" ;


Certes... mais comment insérer le nom du fichier courant dans la
commande sh ?

Évidemment, ceci *ne* *marche* *pas* (le {} n'est pas remplacé):

find . -exec sh -c "foo | bar {}" ;


$ cat foobar
foo | bar $1
$ find . -exec ./foobar {} ;


C'est de la triche puisqu'il faut d'abord écrire un script.

--
Paul Gaborit -


Publicité
Poster une réponse
Anonyme