OVH Cloud OVH Cloud

Bash: liste de fichier

4 réponses
Avatar
julien
Bonjour
Je ne sais pas si c'est le bon forum pour parler de programmation Bash.

J'essaye de recuperer une liste des fichiers pour les traiter, mais je
n'obtiens que le premier fichier de la liste:

>jpegopt *.jpg

#!/bin/bash

#progressive and optimize jpeg pictures

for file in $(ls -1 $1)
do
start=`ls -sh $file|cut -d " " -f1`
jpegtran -optimize $file > "$file.1"
rm $file
mv "$file.1" $file


jpegtran -progressive $file > "$file.1"
rm $file
mv "$file.1" $file
end=`ls -sh $file|cut -d " " -f1`

echo $file \($start \> $end\)
done


J'ai buea tourner autour de ls $1, je n'arrive pas à parcourir la liste
de tous les fichiers d'un repertoire.

Merci
julien

4 réponses

Avatar
T'aZ
On Sat, 24 Jul 2004 12:51:34 -0700, julien wrote:

Bonjour
Je ne sais pas si c'est le bon forum pour parler de programmation Bash.

J'essaye de recuperer une liste des fichiers pour les traiter, mais je
n'obtiens que le premier fichier de la liste:

jpegopt *.jpg



quand tu fais ca, c _avant_ l'execution que ton shell remplace *.jpg par
la liste de tous les jpg
donc truc *.jpg
est equivalent à
truc fichier1.jpg fichier2.jpg fichier3.jpg ...

si tu veux que $1 soit le string "*.jpg" il faut mettre un devant le *
ou bien mettre des ' ' autour

mais pour revenir a ton probleem, en general sous bash, on fait for i in
*.jpg ; do
commande1 ;
commande2 "$i" ;
comamnde3 ;
..
done ;

pas oublier les "" quand tu utilise ta variable sinon ya tt qui va foirer
si le nom de fichier contient des espaces :)

--
T'aZ |Jabber:|GPG keyID:E051925D|http://taz.prout.be
*They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety.* Benjamin Franklin 1759
*Beaucoup,vite,loin,mal.* http://www.cl.cam.ac.uk/~rja14/tcpa-faq.html


Avatar
andrea_ferraris
#!/bin/bash


quel est l'output employant:

#!/bin/bash -x


Andrea

--
If this message isn't electronically signed (digital authentication),
then it could come from anybody, also from who appears as the sender.

Avatar
Unknown
for file in $(ls -1 $1)


for file in $1/* #mieux
do
start=`ls -sh $file|cut -d " " -f1`


pourquoi ls -sh et pas du ?

jpegtran -optimize $file > "$file.1"
rm $file
inutile le rm tu fais un mv dessus juste derrière


mv "$file.1" $file


pourquoi des " autour de file.1 et pas de file ?



jpegtran -progressive $file > "$file.1"
rm $file
mv "$file.1" $file
end=`ls -sh $file|cut -d " " -f1`

echo $file ($start > $end)
done


sinon pour simplifier pourquoi n'écrit tu pas simplement :
for file in *.jpg
do
start=`du -k $file|cut -d " " -f1`
jpegtran -optimize "$file" | jpegtran -progressive > "/tmp/$file.$$"
mv "$file.$$" "$file"
end=`du -k $file|cut -d " " -f1`
done

Avatar
Stephane Chazelas
2004-07-24, 12:51(-07), julien:
[...]
jpegopt *.jpg


#!/bin/bash


#! /bin/bash -

#progressive and optimize jpeg pictures

for file in $(ls -1 $1)


for file # tout court

do
start=`ls -sh $file|cut -d " " -f1`


start=`ls -sh -- "$file" | cut -d " " -f1 | head -1`

jpegtran -optimize $file > "$file.1"
rm $file
mv "$file.1" $file


jpegtran -progressive $file > "$file.1"
rm $file
mv "$file.1" $file


jpegtran -optimize < "$file" | jpegtran -progressive > "$file.1"
[ "${PIPESTATUS[0]}" -eq 0 -a "${PIPESTATUS[1]}" -eq 0 ] || exit
rm -- "$file"
mv -- "$file.1" "$file"

end=`ls -sh $file|cut -d " " -f1`


start=`ls -sh -- "$file" | cut -d " " -f1 | head -1`

echo $file ($start > $end)


printf "%s (%s > %s)n" "$file" "$start" "$end"

done


--
Stephane