Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2007, 11h51   #1
Invité de passage
 
Inscription : mai 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 14
Points : 3
Points : 3
Par défaut while read, fermer un fichier ?

Bonjour,

Je souhaiterai exporter la commande find dans un fichier 'tmp', puis utiliser ce fichier dans la fonction renomme()

Voici le script avec lecture du fichier 'tmp' :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
 
# Comment exécuter le script
# ./renom2 REPERTOIRE
 
# A compléter si nécessaire
caracteres_avant="àâäçéèêëîïôöùüûÂÇÉÈÊËÎÏÔÖÙÜÛ "
caracteres_apres="aaaceeeeiioouuuACEEEEIIOOUUU_"
 
#renomme si un "caracteres_avant" est présent
function renomme()
{
	while read chemin; do 
		echo "dans le répertoire : " $chemin
		cd "$chemin"
		for i in * ; do
			if  [[ $i == *[$caracteres_avant]* ]] ; then
				echo "renomme : "
				mv -v "$i" `echo $i | tr "$caracteres_avant" "$caracteres_apres"` ;
			fi
		done
	done < /home/utilisateur/Desktop/script/tmp
}
 
#liste les répertoires dans l'ordre décroissant
{
	find $1 -type d | sort -r > tmp
} | renomme
Correction :
Je pensais que la syntaxe était mauvaise, mais ce n'est pas le cas, ce script fonctionne aléatoirement... Pensez-vous que c'est lié à l'ouverture du fichier, faut-il le fermer ?

Merci d'avance
ynk68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 14h22   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Euh... enlève le pipe.

Code :
1
2
find $1 -type d | sort -r > tmp
renomme
Ca ne marche pas mieux comme ça ?


Mais pourquoi ne pas garder la première version ? Ca me semble plus propre que de passer par un fichier temporaire.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 14h26   #3
Invité de passage
 
Inscription : mai 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 14
Points : 3
Points : 3
J'ai trouvé juste avant que tu postes le message

Je ne garde pas la première version car il y a énormément de fichiers à renommer et ça rique de saturer la mémoire

C'est effectivement le pipe qui dérange, d'ailleurs j'ai supprimé la fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
 
# Comment exécuter le script
# ./renom2 REPERTOIRE
 
# A compléter si nécessaire
caracteres_avant="àâäçéèêëîïôöùüûÂÇÉÈÊËÎÏÔÖÙÜÛ "
caracteres_apres="aaaceeeeiioouuuACEEEEIIOOUUU_"
 
 
find $1 -type d | sort -r > tmp
while read chemin; do 
	echo "dans le répertoire : " $chemin
	cd "$chemin"
	for i in * ; do
		if  [[ $i == *[$caracteres_avant]* ]] ; then
			echo "renomme : "
			mv -v "$i" `echo $i | tr "$caracteres_avant" "$caracteres_apres"` ;
		fi
	done
done < /home/utilisateur/Desktop/script/tmp
Merci
ynk68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h08.


 
 
 
 
Partenaires

Hébergement Web