Script unix sh
clafister
Messages postés
3
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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.
A voir également:
- Script unix sh
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Ipconfig unix ✓ - Forum Linux / Unix
- Script cmd - Guide
4 réponses
Salut,
Tiens déjà pour ton premier problème :
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) :
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
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]$;-))
comment récupérer chacun des mots entre _ et initialiser autant de variables ?