Page 1 sur 1

[zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : lun. 28 mars 2016, 15:30
par Stdrome1209
Salut à toute et à tous, j'ai besoin d'une commande pour un script :

Code : Tout sélectionner

ls *.jpg *.png *.jpeg 2>/dev/null
sauf que cette dernière qui fonctionne sous bash, ne semble pas fonctionner sous zsh pourquoi ?

Et surtout comment la formuler avec zsh ?

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : lun. 28 mars 2016, 16:01
par papajoke
on n'utilise jamais ls dans un bash !!!!!! malgré ce que disent les tutos OpenClassrooms :evil:
parcourir un répertoire c'est en natif dans bash

et que cette commande ne fonctionne pas dans une console zsh ne pose pas forcément de problème, c'est le shebang du script qui compte !

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : lun. 28 mars 2016, 16:06
par Stdrome1209
papajoke a écrit :on n'utilise pas ls dans un bash !!!!!!
Pourquoi donc ?
papjoke a écrit :et que cette commande ne fonctionne pas dans une console zsh ne pose pas forcément de problème, c'est le shebang du script qui compte !
Je suis en train de découvrir les scripts bash sur OpenClassrooms et donc je tâtonne un peu, j'ai besoin de tester certaines commandes seules dans ma console avant de les intégrer à mon script.

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : lun. 28 mars 2016, 16:24
par papajoke
tout dépend du contexte, et la pas d'infos !

en natif, par exemple :

Code : Tout sélectionner

shopt -s extglob

  for fichier in $HOME/Images/*.@(jpg|jpeg|png) ; do
# for fichier in $HOME/Images/*.{jpg,png}; do # autre pattern
      echo "-- $fichier"
  done
ou : for fichier in *.jpg *.jpeg; do

sinon, si tu désires utiliser une commande externe, tu as find et stat

------------
pour tester ta commande bash dans une console zsh : bash -c 'ls $HOME/Images/*.jpg'

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 10:47
par Stdrome1209
Merci de ton aide, juste pour info voici le script fini :

Code : Tout sélectionner

#!/bin/bash

# Désignation du dossier cible

while [ -z $cible ]
do
read -ep 'Rentrez le nom du dossier cible : ' cible
done

cd $cible

# Vérification des paramètres
# S'ils sont absents, on met une valeur par défaut

if [ -z $1 ]
then
        sortie='galerie.html'
else
        sortie=$1
fi

# Préparation des fichiers et dossiers

echo '' > $sortie

if [ ! -e miniatures ]
then
        mkdir miniatures
fi

# En-tête HTML

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Ma galerie</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <style type="text/css">
       a img { border:0; }
       </style>
   </head>
   <body><p>' >> $sortie

# Génération des miniatures et de la page

for image in `ls *.png *.jpg *.jpeg *.gif 2>/dev/null`
do
        convert $image -thumbnail '200x200>' miniatures/$image
        echo '<a href="'$image'"><img src="miniatures/'$image'" alt="" /> </a> '>> $sortie
done

# Pied de page HTML

echo '</p>
   </body>
</html>' >> $sortie
Il sert a convertir des images en miniature et à générer une petite galerie HTML, il ne s'agit rien de plus que d'un exercice sur OpenClassroom.

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 12:46
par papajoke
Stdrome1209 a écrit :voici le script fini
ou comment apprendre sur des mauvaises bases ...

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 13:42
par Piczel
euh, rien à voir, mais chez moi ls *.jpg *.png 2> /dev/null fonctionne très bien ..

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 16:43
par benjarobin
Cela reste juste une mauvaise pratique !

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 17:33
par Piczel
Stdrome1209 a écrit :Merci de ton aide, juste pour info voici le script fini :

Code : Tout sélectionner

...
for image in `ls *.png *.jpg *.jpeg *.gif 2>/dev/null`
do
...
Il sert a convertir des images en miniature et à générer une petite galerie HTML, il ne s'agit rien de plus que d'un exercice sur OpenClassroom.

beurk beurk beurk, on vient de t'expliquer que c'était une mauvaise pratique, et que la bonne manière était celle là :
papajoke a écrit :

Code : Tout sélectionner

...
  for fichier in $HOME/Images/*.@(jpg|jpeg|png) ; do
# for fichier in $HOME/Images/*.{jpg,png}; do # autre pattern
...
pourquoi ne pas l'utiliser alors ?

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 20:38
par papajoke
- appel a une commande externe par : `ls *.png *.jpg *.jpeg *.gif`, c'est l'ancienne notation (tiré du man de bash); préférer $(ls); de plus cela permet d’intégrer des commandes dans des commandes (tiré du man de sh !!!):

Code : Tout sélectionner

vi $(fgrep -l function $(find . -name '*.c'))
- pourquoi utiliser une commande externe alors que la fonction est incluse dans le langage ?
* bash est lent et tu désires être encore plus lent :shock:
* envie de consommer plus de ressources :twisted:
* flemme d'apprendre un langage mais préfère utiliser la ligne de commande ...

Code : Tout sélectionner

$ echo ${LANG:3:2} 
FR
c'est inclus dans le langage , mais moi je préfère passer par la ligne de commande car je maîtrise la console :echo $LANG | cut -c4-5

- pour le ls en particulier, avec un peu de recherche web tu trouveras les raisons de ne pas l'utiliser... mais si tu persistes (nous sommes dans un monde libre) alors fait attention a la version : depuis un mois sous archlinux le retour n'est plus le même : échappement des caractères espace, arobas...

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : jeu. 31 mars 2016, 22:48
par Moviuro
On ne s'improvise pas mâitre de bash : lis http://mywiki.wooledge.org/BashGuide avec attention.
De même, je te recommande la lecture de http://www.amazon.fr/Learning-Bash-Shel ... eilly+bash
Et d'aller sur #bash avec des scripts qui ressemblent un peu plus à du bash correct que ce que tu nous montres ;) Bon courage :)

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : ven. 01 avr. 2016, 12:05
par lemust83
Bonjour
Il y a aussi ce tuto en français qui n'est pas d'hier mais reste valable:

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : ven. 08 avr. 2016, 12:58
par Stdrome1209
Merci pour ces conseil, effectivement le tuto d'OpenClassrooms date de 2008, je pense en refaire de plus récents notamment sur des revues spécialisées.

Et effectivement maintenant j'utilise $(ma_commande) et non plus `ma_commande`, merci.

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : mer. 01 juin 2016, 23:08
par Kooothor
Deux autres articles intéressants pour écrire de meilleurs scripts :

http://redsymbol.net/articles/unofficia ... rict-mode/
http://www.davidpashley.com/articles/wr ... l-scripts/

Re: [zsh] ls *.jpg *.png *.jpeg 2>/dev/null

Publié : dim. 05 juin 2016, 18:41
par Moviuro
Utilisation de [ dans un script bash ?... :non: