Comments on: For each en bash http://sametmax.com/for-each-en-bash/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: jeff http://sametmax.com/for-each-en-bash/#comment-14714 Tue, 08 Oct 2013 14:19:45 +0000 http://sametmax.com/?p=953#comment-14714 find . -name “*.jpg” fournit la liste des fichiers dans un flux de sortie.

Le pipe permet de rediriger ce flux sur l’entrée de ce qui se trouve à sa droite.

Le while permet d’itérer tant que “le read renvoie quelque chose”.

Le read permet de lire une ligne sur l’entrée qu’on lui fournit.

Le paramètre line permet de spécifier le nom de la variable dans laquelle sera mise la ligne lue.

C’est cette variable qui sera utilisée ensuite dans le corps de la boucle.

Il faut quand même faire attention à bien protéger par des doubles quotes l’utilisation de “$line” sinon le readlink ne fonctionnera pas.

]]>
By: Sam http://sametmax.com/for-each-en-bash/#comment-14704 Tue, 08 Oct 2013 12:36:57 +0000 http://sametmax.com/?p=953#comment-14704 Cool. Tu peut nous expliquer ce que ça fait pas à pas ?

]]>
By: jeff http://sametmax.com/for-each-en-bash/#comment-14702 Tue, 08 Oct 2013 12:16:21 +0000 http://sametmax.com/?p=953#comment-14702 Une autre solution qui permet d’éviter de changer la variable IFS est la suivante :

find . -name "*.jpg" | while read line
do
echo $(readlink -f "$line")
done

]]>
By: Vash2593 http://sametmax.com/for-each-en-bash/#comment-2989 Sat, 10 Nov 2012 14:44:10 +0000 http://sametmax.com/?p=953#comment-2989 Salut,
il faut faire attention dans le cas de scripts portable : les sous commandes shell avec `$(foo)’ ne sont pas toujours gere.

Il faut utiliser les back quotes a la place.

Sinon l’article est sympas : bravo. Je n’avais jamais ecrit IFS de cette maniere. J’ai plutot l’habitude de l’ecrire directement avec le saut de ligne en explicite :

IFS=’

]]>
By: zipe31 http://sametmax.com/for-each-en-bash/#comment-508 Sun, 24 Jun 2012 23:28:19 +0000 http://sametmax.com/?p=953#comment-508 @sam Désolé mais je ne vois pas ce que vient faire awk là-dedans ;-\

]]>
By: Sam http://sametmax.com/for-each-en-bash/#comment-502 Sun, 24 Jun 2012 21:21:38 +0000 http://sametmax.com/?p=953#comment-502 @zipe31 pour répondre à la dernière remarque: rajoutez awk dans la commande…

]]>
By: zipe31 http://sametmax.com/for-each-en-bash/#comment-494 Sun, 24 Jun 2012 17:53:49 +0000 http://sametmax.com/?p=953#comment-494 Bonjour,

Deux petites remarques concernant l’exemple pris :

– À partir du moment où tu donne un chemin absolu à la commande find, le chemin en sortie (sauf demande explicite), sera toujours un chemin absolu.
– La commande “echo” dans “echo $(readlink -f $f)” est inutile, la commande “readlink” en elle même renvoie son résultat sur la sortie standard (l’écran).

Puis concernant la commande “find”, je ne vois pas ce qu’il y a de plus compliqué par rapport à la lourdeur de ta boucle “for… do… done” à mettre juste (espace dans le nom des fichiers compris):
find /home/toi -iname “*.jpg” -exec readlink -f {} \;

Bonne fin de week-end.

JP.

]]>
By: Sam http://sametmax.com/for-each-en-bash/#comment-465 Fri, 22 Jun 2012 17:47:58 +0000 http://sametmax.com/?p=953#comment-465 C’est exacte, je vais modifier l’article pour y pallier.

]]>
By: Sébastien http://sametmax.com/for-each-en-bash/#comment-462 Fri, 22 Jun 2012 16:36:00 +0000 http://sametmax.com/?p=953#comment-462 Si les fichiers comportent des espaces dans leur nom, cette commande ne fonctionnera pas.
Plus d’info ici :
http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html

a+

]]>