Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1238 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  ☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?

n°1336885
Swiss_Knig​ht
600 MeV since 1957.
Posté le 02-05-2013 à 13:11:36  profilanswer
 

Bonjour,

 

j'ai un petit souci qui n'est pas un puisque je peux passer outre mais je souhaite ne pas allonger mon script inutilement.

 

Voilà, j'ai un code qui traite des fichiers images au format jpeg.
Pour l'instant il "mange" un répertoire que l'utilisateur lui passe en argument. Mais je souhaite aussi pouvoir lui passer un fichier unique en donnant le nom de ce fichier lors de l'appel du script, en lieu et place d'un répertoire. L'argument du fichier étant sous la même "lettre" que celui du dossier lorsqu'on décide de traiter un dossier (cette lettre porte sans doute un nom plus spécifique ; ce sont ces petites lettres précédées d'un tiret et qui sont lues par getopts).
En l'occurrence l'argument est passé comme ceci : mon_script.sh -d "chemin/vers/dossier"
Et ce chemin est stocké dans la variable ${fichier}.

 

Bref, voilà un peu la structure simplifiée de ma boucle :

 

for i in "${fichier}"/*.[Jj][Pp]*[Gg]; do j='echo "${i}" | sed -e 's/\.jp\(e\)*g/\_processed.jp\1g/gI''; \
do
 # traiter les fichiers ${i} jpg du dossier les uns après les autres en leur faisant subir plein de trucs
done


Je profite en 1ère ligne de passer toutes les extensions jpeg en minuscules.

 

J'ai mis cette boucle for dans un test : if [ -d "${fichier}" ]

 

Ce que je peux faire, mais que je ne veux pas faire, c'est de remettre toutes les commandes qui sont dans la boucle for, dans un autre test : if [ -f "${fichier}" ]
Mais ça ferait doublon, et allongerait, je pense, inutilement le code, surtout que les commandes resteront les mêmes, mais elles seraient appliquées sur un fichier unique, au lieu des N fichiers contenus dans un dossier.

 

Merci beaucoup de vos tuyaux !!
Je dois passer à côté d'un truc tout con là...


Message édité par Swiss_Knight le 07-05-2013 à 00:47:02

---------------
Hergestellt in der Schweiz.
mood
Publicité
Posté le 02-05-2013 à 13:11:36  profilanswer
 

n°1336903
goblin_rie​ur
ingé systemes unix
Posté le 02-05-2013 à 15:27:17  profilanswer
 

tu mets ton traitement dans une fonction  
genre
et dans ta boucle à chaque itération :  

Code :
  1. [ -f ${fichier} ] && fonction(paramfichier) || fonction(paramrepertoire)


 
y'a qu'à ajouter une variable pour sortir $REP$FICH  au niveau de la boucle  
par defaut ça tombe sur "${REP}"/*.[Jj][Pp]*[Gg] et  sinon avec paramfichier ça donnc $REP/$FICH
 
y'a que ça a faire ça suffit.
 


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
n°1337313
Swiss_Knig​ht
600 MeV since 1957.
Posté le 06-05-2013 à 21:57:28  profilanswer
 

Salut,
je souhaite éviter de multiplier les fichiers et tout conserver dans un seul fichier (et puis je débute en bash, je ne connais pas le fonctionnement des fonctions). Le script est ultra-spécifique ; il me sert à traiter des images au format jpg.
Actuellement je lui passer un dossier en argument, et il traite tout ce qu'il trouve dedans.
Mais j'aurais aimé pouvoir ne traiter ponctuellement qu'une seule image, sans devoir créer un dossier vide pour l'y déplacer afin de lancer le script sur ce nouveau dossier.

 

EDIT : résolu !

 

En effectuant un petit test avant de lancer la grande boucle for, et grâce à la commande dirname, je peux travailler systématiquement sur un dossier. Donc même en spécifiant un fichier, je travaille sur le dossier qui contient ce fichier.
Oui mais si le dossier contient d'autres images ?
Pas grave : je conserver le nom du fichier en faisant un test avant, dans un tableau, et je fait tourner la boucle sur ledit tableau qui ne contiendra que le nom d'un fichier si un fichier a été passé au script, et le nom de tous les fichiers jpg si un dossier a été passé au script.

 

#


Message édité par Swiss_Knight le 07-05-2013 à 00:41:34

---------------
Hergestellt in der Schweiz.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  ☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?

 

Sujets relatifs
ecraser le contenu d'un fichier par un autre contenuProblèmes de droits sur dossier partagé par Samba
quels jeux vidéos avec démonstration en boucle ?[Bash] Problème avec paramètres dans variables
[VI] Quitter et passer au fichier suivant ?Compresser tous les fichiers d'une certaine extension dans un dossier
net-snmp extend, lecture de fichier 
Plus de sujets relatifs à : ☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR