Script unix sh

Fermé
clafister Messages postés 3 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 4 janvier 2007 - 2 janv. 2007 à 15:06
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 4 janv. 2007 à 19:31
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.
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 janv. 2007 à 21:23
Salut,

Tiens déjà pour ton premier problème :
var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf"

echo ${var##*_}

NomDufichier.pdf
;-))
0
clafister Messages postés 3 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 4 janvier 2007
3 janv. 2007 à 09:53
merci
comment récupérer chacun des mots entre _ et initialiser autant de variables ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 janv. 2007 à 07:36
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]$
;-))
0
clafister Messages postés 3 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 4 janvier 2007
4 janv. 2007 à 13:56
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 janv. 2007 à 19:31
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]$
;-))
0