Script unix sh
clafister
Messages postés
3
Statut
Membre
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
bonjour
je souhaite écrire un script sh pour déplacer des fichiers dans un répertoire X. Ces fichiers doivent être renommés lors de ce déplacement sur la base du nom du fichier. Le nom du fichier originel est contruit sous la forme :
NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf
Il est dans un répertoire commun et chacune des ficheirs encore présent dans ce répertoire doivent être renommer et déplacer dans l'arborescence suivante
NomduNiveau1\NomduNiveau2\NomduNiveau3\NomDufichier.pdf
si les répertoires n'existent pas, il faudrait qu'ils soient créée.
je souhaite écrire un script sh pour déplacer des fichiers dans un répertoire X. Ces fichiers doivent être renommés lors de ce déplacement sur la base du nom du fichier. Le nom du fichier originel est contruit sous la forme :
NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf
Il est dans un répertoire commun et chacune des ficheirs encore présent dans ce répertoire doivent être renommer et déplacer dans l'arborescence suivante
NomduNiveau1\NomduNiveau2\NomduNiveau3\NomDufichier.pdf
si les répertoires n'existent pas, il faudrait qu'ils soient créée.
Configuration: Mac OS X Firefox 2.0.0.1
4 réponses
-
Salut,
Tiens déjà pour ton premier problème :var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf" echo ${var##*_} NomDufichier.pdf;-))
-
Re-
Voilà un exemple non optimisé (il y a surement moyen de faire plus concis) :[jp@MDK tmpfs]$ cat essai.sh #! /bin/bash var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomduNiveau4_NomDufichier.pdf" count=1 set $(echo ${var%_*}| tr '_' ' ') && echo $* | tr -s ' ' '\n' > tmp.txt while read param do set niveau"$count"="$param" echo niveau"$count"="$param" count=$(expr $count + 1) done < tmp.txt rm -f tmp.txt [jp@MDK tmpfs]$ sh essai.sh niveau1=NomduNiveau1 niveau2=NomduNiveau2 niveau3=NomduNiveau3 niveau4=NomduNiveau4 [jp@MDK tmpfs]$;-))
-
Merci pour cette proposition. Je vois l'idée donnée.
Reste à l'intégrer dans mon script qui traite tous les fichiers dans un réperoire et les redispatche dans l'arborescence adhoc (création éventuelle).
:D -
Re-
[jp@MDK tmpfs]$ cat essai.sh #! /bin/bash cd /home/jp/tmpfs/ for fich in * do name=$(echo ${fich##*_}) rep=$(echo ${fich%_*}| tr '_' '/') mkdir -p "$rep" 2>/dev/null cp "$fich" "$rep/$name" 2>/dev/null done [jp@MDK tmpfs]$ ls -1 NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier1.pdf NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier2.pdf NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier3.pdf NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier4.pdf NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier5.pdf NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier6.pdf [jp@MDK tmpfs]$ sh essai.sh && ls -R .: NomduNiveau1/ NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier1.pdf NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier2.pdf NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier3.pdf NomduNiveau4/ NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier4.pdf NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier5.pdf NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier6.pdf ./NomduNiveau1: NomduNiveau2/ ./NomduNiveau1/NomduNiveau2: NomduNiveau3/ ./NomduNiveau1/NomduNiveau2/NomduNiveau3: NomDufichier1.pdf NomDufichier2.pdf NomDufichier3.pdf ./NomduNiveau4: NomduNiveau5/ ./NomduNiveau4/NomduNiveau5: NomduNiveau6/ ./NomduNiveau4/NomduNiveau5/NomduNiveau6: NomDufichier4.pdf NomDufichier5.pdf NomDufichier6.pdf [jp@MDK tmpfs]$;-))