Unix - pipes - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 16-03-2011 à 20:49:03
find . -iname "*.eps" -exec epstopdf {} \; |
trouver tous les fichiers .eps et les passer en argument à epstopdf
ce que tu fais toi c'est donner la liste des fichiers en entrée standard (stdin) à epstopdf, qui attend un nom de fichier en argument, pas sur stdin.
Marsh Posté le 18-03-2011 à 11:21:52
Oui mais cette solution n'utilise pas les pipes
D'autre part cette solution se limite à un certains nombre de fichiers.
Il vaut mieux utiliser xargs.
Marsh Posté le 18-03-2011 à 11:28:40
Dans mon cas la commande donnée par black_lord a fonctionné, merci !
Je ne connaissais pas xargs, je vais regarde ça .
Marsh Posté le 18-03-2011 à 20:03:05
bichtoubard a écrit : Oui mais cette solution n'utilise pas les pipes |
C'est pas un mal
bichtoubard a écrit : D'autre part cette solution se limite à un certains nombre de fichiers. |
Marsh Posté le 18-03-2011 à 20:21:16
bichtoubard a écrit : Oui mais cette solution n'utilise pas les pipes |
ok lol. ne pas utiliser les pipes n'est pas un mal pour le coup, et non, c'est pas limité en arguments. Accessoirement xargs est considéré comme non sur....
Marsh Posté le 23-03-2011 à 13:23:11
Disons qu'il y a marqué pipe dans le titre.
Le fait de passer une commande bash sur un exec a un find se limite à un certains nombre de fichiers
Code :
|
http://www.gnu.org/software/coreut [...] t-too-long
Marsh Posté le 23-03-2011 à 14:44:53
bichtoubard a écrit : Disons qu'il y a marqué pipe dans le titre. |
Non puisque find va appeler epstopdf sur chaque fichier.
Marsh Posté le 23-03-2011 à 18:00:46
bichtoubard a écrit : Disons qu'il y a marqué pipe dans le titre. |
Intégriste va
Le find de black_lord est beaucoup mieux et moins tordu que des pipes dans tous les sens. Et en plus c'est scriptable ainsi sans sushi
Marsh Posté le 23-03-2011 à 20:08:12
bichtoubard a écrit : Disons qu'il y a marqué pipe dans le titre.
|
avant de jouer au malin relis bien ce qu'il y a d'écrit tu t'es planté là le exec n'a qu'un seul argument, pas tous les fichiers, c'est l'avantage de cette solution. Si tu veux t'en convaincre fait un -print.
Marsh Posté le 24-03-2011 à 15:57:09
C'est vrai sur le coup je me suis planté, find va fonctionner (j'étais pourtant sûr d'avoir déjà rencontré un "too many arguments" sur un find )
Je me souvenais plus exactement pourquoi il fallait utiliser xargs plutôt que find -exec, j'ai cru que c'était pour cette raison, mais en fait non c'est pour des questions de perfs que xargs est meilleur (http://www.sunmanagers.org/pipermail/summaries/2005-March/006255.html)
Quand au fait que xargs soit considéré comme "non sûr" je voudrai bien avoir tes sources sur le sujet.
Au final l'OP nous dit qu'il veut appliquer ce qu'il a appris sur les pipes, et vous lui proposez une solution sans pipe. Je trouve ça pas adapté c'est tout
C'est pas de l'intégrisme, ou une manière de me la raconter, c'est juste essayer de faire une réponse adaptée au sujet...
Marsh Posté le 24-03-2011 à 18:43:16
Tu me rappelles un collègue de boulot qui avait posté une question sur notre forum interne pour une commande (pv), quelqu'un lui a répondu "RTFM Google" avec un lien vers des exemples et une explication précise de la commande, et celui qui a répondu s'est fait rembarré pour le "RTFM Google"
Après les pipes c'est beau, mais en pratique tu galères parfois Un exemple ? regardes sur commandlinefu il y a finalement assez peu de pipes.
Version plus hard et plus crade, toujours sans pipe :
Code :
|
Marsh Posté le 24-03-2011 à 21:18:24
Si j'avais su que ma question déclencherait ce débat
bardiel a écrit :
|
Désolé mais cette commande me parle déjà plus . Pourquoi tu la déconseilles ?
Marsh Posté le 24-03-2011 à 23:12:54
bichtoubard a écrit : C'est vrai sur le coup je me suis planté, find va fonctionner (j'étais pourtant sûr d'avoir déjà rencontré un "too many arguments" sur un find ) |
pour le non sûr : "RTFM", c'est dedans. et mieux que xargs y'a parallel (un xargs sous stéroides). cela dit, tu n'as toujours pas donné de solution avec xargs (j'attends de voir, vu qu'il y a un piège )
parce que ça utilise le globbing (extension du caractère *) et que donc c'est soumis au "too many arguments".
Marsh Posté le 25-03-2011 à 13:23:50
Pour la solution avec les pipes, je dirai basiquement
Code :
|
Je viens d'aller voir sur commandlinefu, tous les exemples de find utilisent xargs et non exec, et les exemples avec exec se font basher dans les commentaires avec les performances médiocres de exec.
Ceci dit les dernières versions de find pallient apparemment au problème avec la syntaxe suivante
Code :
|
Je connaissais pas.. mais manque de portabilité surement.
Oh et puis quitte à faire l'intégriste, bardiel je te conseille d'utiliser $() au lieu des backquote parce que c'est mieux
Quand à la sécurité de xargs effectivement on trouve ca dans le man
Citation : It is not possible for xargs to be used securely, since there will always be a time gap between the production of the list of input files and their use in the commands that xargs issues. If other users have access to the system, they can manipulate the filesystem during this time window to force the action of the commands xargs runs to apply to files that you didnât intend. For a more detailed discussion of this and related problems, please refer to the ââSecurity Considerationsââ chapter in the findutils Texinfo documentation. The -execdir option of find can often be used as a more secure alternative. |
Ceci dit a man find on trouve aussi ceci
Citation : |
Donc pour le coup si tu proposes pas de solution avec execdir ton argument est invalide
Marsh Posté le 25-03-2011 à 18:14:05
bichtoubard a écrit : Oh et puis quitte à faire l'intégriste, bardiel je te conseille d'utiliser $() au lieu des backquote parce que c'est mieux |
Bonne idée tiens... mais flemme
Marsh Posté le 29-03-2011 à 14:06:57
bardiel a écrit :
|
Et un "Useless Use Award", un !
http://partmaps.org/era/unix/award.html#ls
Sinon y'a ça (mais sans pipe) :
while read |
Marsh Posté le 29-03-2011 à 18:10:09
Hého, j'ai dis plus crade, j'ai pas dit meilleur (black_lord a indiqué le pourquoi ) et au moins c'est du one-line...
Marsh Posté le 29-03-2011 à 19:17:55
C'est pas le globbing que je conteste, c'est la poupée russe "`ls *.pdf`". Et d'ailleurs je conteste rien, je sodomise les pucerons en zone urbaine à l'occasion mais à peine...
Marsh Posté le 29-03-2011 à 21:49:31
Dans ce cas je vais reprendre ta signature :
La réponse est 42.
Marsh Posté le 16-03-2011 à 20:36:30
Bonjour,
j'essaie d'appliquer ce que j'ai appris sur les pipes sur un cas concret qui me serait utile : j'ai de nombreux fichiers .eps dans un répertoire que j'aimerai convertir à la volée en .pdf grâce à epstopdf.
Voici la commande que j'ai tapée dans le shell :
ou encore
ce qui me donne
!!! Error: Input filename missing
Quelqu'un pourrait me donner l'astuce pour que cela fonctionne ?
Merci d'avance