Script bash - commande sed
Résolu
djmic
Messages postés
73
Statut
Membre
-
djmic Messages postés 73 Statut Membre -
djmic Messages postés 73 Statut Membre -
Bonjour à tous,
Voilà j'ai reçu un exo de la part d'un professeur.
Mais je n'arrive pas à m'en sortir.
Le but du script est de renommer automatiquement les fichiers d'un répertoire donné en argument de telle sorte que le nom des fichiers commence par une majuscule et que le reste soit mis en minuscule MAIS à l'aide de la commande SED
j'ai décidé de faire d'abord par étape.
J'ai donc d'abord décidé de gérer des fichiers sans extension et que des caractères alphabétiques.
Le soucis c'est que ca ne fonctionne pas.
Ça ne fait que lister mon répertoire que je passe en argument.
Est ce que quelqu'un pourrait m'aider pour cette commande sed?
Merci
Voilà j'ai reçu un exo de la part d'un professeur.
Mais je n'arrive pas à m'en sortir.
Le but du script est de renommer automatiquement les fichiers d'un répertoire donné en argument de telle sorte que le nom des fichiers commence par une majuscule et que le reste soit mis en minuscule MAIS à l'aide de la commande SED
j'ai décidé de faire d'abord par étape.
J'ai donc d'abord décidé de gérer des fichiers sans extension et que des caractères alphabétiques.
if [ $# -eq 0 ];then echo "Veuillez renseignez le répertoire en paramètre"; elif [ -d $1 ];then ls $1 | faq/478-sed sed -e 's/[a-zA-Z]+/[A-Z][a-z]*/' else echo "Le répertoire n'existe pas"; fi
Le soucis c'est que ca ne fonctionne pas.
Ça ne fait que lister mon répertoire que je passe en argument.
Est ce que quelqu'un pourrait m'aider pour cette commande sed?
Merci
A voir également:
- Script bash - commande sed
- Invite de commande - Guide
- Script vidéo youtube - Guide
- Commande terminal mac - Guide
- Diskpart commande - Guide
- Commande dism - Guide
9 réponses
Juste un petit détail, sed ne modifie donc pas directement le nom du fichier???
Il faut le coupler à la commande mv?
Merci
Il faut le coupler à la commande mv?
Merci
par contre j'ai un soucis avec la boucle for
Moi ce que je dois faire, ce n'est pas utiliser le répertoire courant mais le répertoire passé en argument?
comment dois-je faire?
for fich in $(find $1 -type d);do
.....
?
personnellement ca ne fonctionne pas.
je fais un echo $fich pour voir s'il parcourt bien mon répertoire
mais il m'affiche le nom de mon répertoire.
merci
Moi ce que je dois faire, ce n'est pas utiliser le répertoire courant mais le répertoire passé en argument?
comment dois-je faire?
for fich in $(find $1 -type d);do
.....
?
personnellement ca ne fonctionne pas.
je fais un echo $fich pour voir s'il parcourt bien mon répertoire
mais il m'affiche le nom de mon répertoire.
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voilà ce que j'ai testé
il parcourt bien mon répertoire mais j'ai des erreurs au niveau de la commande mv.
sed n'agit pas. sans doute une erreur dans la regex.
je ne gère pas les extensions pour le moment.
if [ $# -eq 0];then echo "Veuillez renseigner le répertoire en paramètre"; elif [ -d $1 ];then for fich in $1/*;do mv "$fich" "$(echo $fich | sed 's/[a-zA-Z]+/[A-Z][a-z]*/g')"; done else echo "Le répertoire n'existe pas"; fi
il parcourt bien mon répertoire mais j'ai des erreurs au niveau de la commande mv.
sed n'agit pas. sans doute une erreur dans la regex.
je ne gère pas les extensions pour le moment.
jp@MDK:~/tmpfs ssh$ cat foo.sh
#! /bin/sh
#set -xv
for i in rep/sousrep/brol/*
do
rep=$(dirname $i)
fich=$(echo $(basename $i)|sed s'/./\u&/')
mv -v $i ${rep}/${fich}
done
jp@MDK:~/tmpfs ssh$ tree
.
|-- -
|-- foo.sh
`-- rep
`-- sousrep
|-- brol
| |-- fich1.txt
| |-- fich2.txt
| `-- fich3.txt
|-- fich1.txt
|-- fich2.txt
`-- fich3.txt
4 directories, 7 files
jp@MDK:~/tmpfs ssh$ ./foo.sh
`rep/sousrep/brol/fich1.txt' -> `rep/sousrep/brol/Fich1.txt'
`rep/sousrep/brol/fich2.txt' -> `rep/sousrep/brol/Fich2.txt'
`rep/sousrep/brol/fich3.txt' -> `rep/sousrep/brol/Fich3.txt'
jp@MDK:~/tmpfs ssh$ tree
.
|-- -
|-- foo.sh
`-- rep
`-- sousrep
|-- brol
| |-- Fich1.txt
| |-- Fich2.txt
| `-- Fich3.txt
|-- fich1.txt
|-- fich2.txt
`-- fich3.txt
4 directories, 7 files
jp@MDK:~/tmpfs ssh$
;-))
Merci pour la solution, c'est super.
Mais j'aimerai comprendre un minimum, enfin juste la regex que je n'ai pas compris.
Le . represente la chaîne entière
mais le \u et le & qui suit?
merci tu m'aides vraiment beaucoup c'est sympa
Mais j'aimerai comprendre un minimum, enfin juste la regex que je n'ai pas compris.
/./\u&/
Le . represente la chaîne entière
mais le \u et le & qui suit?
merci tu m'aides vraiment beaucoup c'est sympa
Le "." (point) représente un caractère, le 1er ici en l'occurrence.
le "\u" est un paramètre avancé dans la partie de substitution (celle de droite) qui permet de mettre le caractère qui suit en majuscule (u comme uppercase. L'anti-slash (\) sert à protéger le "u" afin qu'il soit interprété comme paramètre et non comme un caractère littéral).
Le "&" (esperluette) représente le motif mis en évidence dans la partie de substitution de gauche.
Donc on met en majuscule (\u) la partie mise en évidence (le 1er caractère) représentée par "&".
Tout ça est expliqué dans la FAQ sur sed...
le "\u" est un paramètre avancé dans la partie de substitution (celle de droite) qui permet de mettre le caractère qui suit en majuscule (u comme uppercase. L'anti-slash (\) sert à protéger le "u" afin qu'il soit interprété comme paramètre et non comme un caractère littéral).
Le "&" (esperluette) représente le motif mis en évidence dans la partie de substitution de gauche.
Donc on met en majuscule (\u) la partie mise en évidence (le 1er caractère) représentée par "&".
Tout ça est expliqué dans la FAQ sur sed...