Dans un dossier fichiers, j'ai des fichiers (répétition, ook), qui sont sous la forme :
fichierXX.txt (ex : fichier01.txt)
J'ai donc créé ce script :
nbfichiers=`ls -1 fichiers | wc -l`
for (( i=1; i != nbfichiers+1; i++ ))
do
if [ $i -le 9 ] # <= 9
then
fonction fichiers/fichier0$nbfichiers.txt
else
fonction fichiers/fichier$nbfichiers.txt
fi
done
Mais fonction fichiers/fichier0$nbfichiers.txt est incorrect, car lors de l'appel ca donne :
shell: line 23: 10747 Erreur de segmentation fonction fichiers/fichier0$nbfichiers.txt
Alors que sur le fonction fichiers/fichier$nbfichiers.txt, aucune erreur !!
Pouvez-vous me corriger svp ?
# Pas besoin de if
Posté par peck (site web personnel) . Évalué à 2.
...
do
file=`printf fichiers/fichier%02d.txt $i`
fonction $file
done
Et pour faire encore plus simple
for file in fichiers/*
do
fonction $file
done
# hou la on se complique la vie...
Posté par fearan . Évalué à 2.
et on vire le if ^^
par contre l'erreur de segmentation, a moins que tu aies des caractère non imprimable dans don shell je vois pas
( j'ai eu ce genre de blague avec cygwin selon les fins de lignes \r\n ou \n et sur des unix qui récupérait des script écrits sous windows)
ps: en bash je préfère nettement le $( ) qui est équivalent à ` ` ( qui nonobstant le fait d'éviter de se torturer les doigts sur un clavier azerty, a l'intérêt
a ) d'être plus lisible ( on le confond pas avec des ', on voit plus facilement où ça finit )
b ) d'être nettement plus imbricable
c ) d'être plus homogène avec des écriture $(( )) ( équivalent à `expr `
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: hou la on se complique la vie...
Posté par Animatrix . Évalué à 1.
Sinon, pour mon dossier fichiers/, il y a un fichier que je n'utilise pas.
Donc en fait nbfichiers = commande ls - 1
Ta commande me donne :
shell: line 16 : fichiers/fichier01.txt: Permission non accordée (pour tous les fichiers)
Pourtant c'est pas une erreur de droit :
-rw-r--r-- 1 animatrix animatrix 403 sept. 13 23:57 fichier01.txt
[^] # Re: hou la on se complique la vie...
Posté par Animatrix . Évalué à 1.
for file in Journees/journee*
do
maj $file
done
# Nouveau pb
Posté par Animatrix . Évalué à 1.
J'aimerais passer en argument le nom du dossier/fichier, j'ai essayé :
if [ -z $2 ]
then
$2="Fichiers/fichiers"
fi
for file in ($2)*
do
Mais j'obtiens cette erreur :
shell: line 12: =Fichiers/fichier: Aucun fichier ou dossier de ce type
shell: line 15: Ouvre le fichier maj $file $3
[^] # Re: Nouveau pb
Posté par castorpilot . Évalué à 1.
La ligne $2="Fichiers/fichiers" est donc incorrecte.
[^] # Re: Nouveau pb
Posté par Animatrix . Évalué à 1.
Parce qu'en fait, je croyais qu'il fallait en mettre toujours de l'utilisation d'une fonction
[^] # Re: Nouveau pb
Posté par fearan . Évalué à 2.
var=${2:-Fichiers/fichiers}
for file in ($var)*
do
ou plus court
for file in ${2:-Fichiers/fichiers}*
do
le ${var:-plop} permet une substitution par plop si var est vide ou null
sinon tu as les assignation ${var:=plop}
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Nouveau pb
Posté par Animatrix . Évalué à 1.
Ce qui est dommage c'est que dans la plupart des tutos que j'ai trouvé sur le net, elle n'est pas indiqué, alors que c'est un vrai raccourci.
En tout cas, merci beaucoup pour l'aide
# Comment couper les cheveux en quatre ...
Posté par wismerhill . Évalué à 2.
Tout ton bazard
nbfichiers=`ls -1 fichiers | wc -l`
for (( i=1; i != nbfichiers+1; i++ ))
do
if [ $i -le 9 ] # <= 9
then
fonction fichiers/fichier0$nbfichiers.txt
else
fonction fichiers/fichier$nbfichiers.txt
fi
done
peut se résumer à
fonction fichiers/fichier*.txt
Et si tu veux t'assurer que tu ne prend que les fichier*.txt à deux chiffres ça donne
fonction fichiers/fichier[0-9][0-9].txt
Et si ta fonction est longue et que tu veux avoir un état d'avancement tu peux faire un truc du genre
for f in fichiers/fichier*.txt;do
echo $f
fonction "$f"
done
(les guillements autours du $f ne sont pas utile dans cet exemple, mais dans l'absolu c'est nécessaire au cas où les noms de fichiers contiendraient des espaces, ou autres caractères amusants)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.