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 17/12/2007, 19h29   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
Par défaut recuperer les fichier present dans un repertoire et les renommer en cascade

bonjour,

j'aurais besoin qu'on me mette sur la voix.
Je voudrait faire un test sur un fichier, si c'est un repertoire je voudrait pouvoir renommer tous les fichier present dans se repertoire en rajoutant un prefix a leur nom :
exemple rajouter "toto_" devant chaque fichier present dans se repertoire

je pensait recuperer la liste des fichier present dans se repertoire par un ls $LeNomDeMonRepEnParametre

seulement pour verifier si ce fichier et un repertoire et surtout pour renommer tous les fichiers present je ne sais pas comment m'y prendre
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 20h58   #2
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
je rajoute que j'ai trouver une solution mais ça modifie seulement l'affichage du resultat de ma commande, et pas mes fichier
Rep est une variable contenant mon repertoire courant
mot contenant le mot a enlever s'il est present dans le nom du fichier

ls Rep | sed s/"$mot"//g

forcement cela modifie seulement l'affichage du ls, je voudrait donc integré la commande mv dedans, est ce possible ?
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 10h58   #3
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Avec une boucle...
Code :
1
2
3
4
for file in $(ls ${rep})
do
  mv ${file} toto_${file}
done
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 17h37   #4
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
merçi bcp, autre question pour verifier si toto_ est deja contenu dans le nom d'un des fichiers, et le cas echeant ne pas faire la modif ?
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 17h46   #5
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Code :
1
2
3
4
for file in $(ls ${rep})
do
  [[ -e toto_${file} ]] || mv ${file} toto_${file}
done
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 18h29   #6
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
Citation:
Envoyé par al1_24 Voir le message
Code :
1
2
3
4
for file in $(ls ${rep})
do
  [[ -e toto_${file} ]] || mv ${file} toto_${file}
done
merçi bcp mais pourais-je avoir de plus ample explication ?

si j'ai bien compris file dans la boucle est un compteur de fichier il prend la valeur 1 ?
est ce le meme que dans $file de la commande situé dans la boucle ? car j'ai deja fait un test et si je me souvient bien la boucle n'indexe pas les fichier le mv va donc me sortir des $i par exemple ...

dernier point ceci m'es inconnu "[[ -e toto_${file} ]]" il n'y a aucune commande devant :s

dsl de vous embeter mais je prefere comprendre les solution qu'on me donne plutot que les recopier betement

merçi a vous
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 10h17   #7
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Toutes les réponses (et plein d'autres choses fort intéressantes ) se trouvent
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 16h49   #8
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
syntaxe plus accessible, je pense

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dir="nom_rep"
cd $dir
 
for file in * 
do
	if [[ -d ${file} ]] ; then
		echo "* ${file} est un repertoire, fichier suivant !"
		continue
	fi 
	if [[ ! -e toto_${file} ]] ; then
		#-- toto_${file} not exist 
		mv ${file} toto_${file}
	fi 
done
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 22h43   #9
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
merçi j'ai reglé mon probleme

seulement un autre est apparu ça se passe toujours comme ça :p

je cherche a parcourir toute mon arborescence de fichier depuis le $HOME et virer touts les fichier d'un certain nom passé en parametre ainsi que renommer touts les fichier contenant une certaine chaine de caractere, seulement j'ai l'impression que mon script tourne en boucle.
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h43   #10
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 77
Points : 28
Points : 28
bonjour vous m'avez repondu il y'a quelques jours,
peut etre pourriez vous m'éclairer a nouveau

je cherche a faire un test dans une fonction recursive pour parcourir mon arborescence

si une certaine chaine de car est presente dans le fichier je l'enleve.

mais mon test ne fonctionne pas :

Code :
1
2
3
4
5
6
7
8
9
10
11

if [[ -e *$mot* ]]
then
	echo "${i}" > Test1 
	echo `sed s/"$mot"//g Test1` > Test2
	nom=`cat Test2`
	mv ${i} "$nom"
	rm Test2
	rm Test1
fi
pourriez vous corriger mon test s'il vous plait ?
oldscrout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h44   #11
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Les expressions conditionnelles sont détaillées ici.
Citation:
Envoyé par man
-e fichier
Vrai si le fichier existe.
Le nom de fichier doit donc être précisé complètement, et pas seulement un modèle.

Par ailleurs, dans la suite de ton programme, je ne comprends pas d'où sort ${i}
Tes multiples lignes de commandes et fichiers temporaires peuvent être évités en utilisant les pipelines.
La notation $(...) est à préférer à `...` pour la substitution de commandes.
Code :
mv ${i} $(echo ${i} | sed s/${mot}//g)
Cela peut encore se simplifier en Je t'encourage vivement à lire les descriptions de commandes internes dans le manuel de l'utilisateur de bash.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 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 07h27.


 
 
 
 
Partenaires

Hébergement Web