Bonjour,

Ce que je cherche a faire :
Je cherche a crée un programme qui va compresser un certain nombre de fichier selon une liste.

je tien a garder l'arborescence des fichier depuis un certain dossier (dod)

en concret, j'ai une liste de fichier :
listeres.lst
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
/root/facs_ffa/dod/maps/dod_25doors.res
/root/facs_ffa/dod/maps/dod_2pillboxes.res
/root/facs_ffa/dod/maps/dod_4saisons.res
Ces fichier sont des listing :
dod_25doors.res
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
// dod_25doors.res - created with RESGen v2.0.2.
// RESGen is made by Jeroen "ShadowLord" Bogers,
// with serveral improvements and additions by Zero3Cool.
// For more info go to http://resgen.hltools.com
 
// .res entries (7):
models/mapmodels/bord.mdl
models/mapmodels/by_furniture_group-wreck.mdl
models/mapmodels/couch1bl.mdl
models/mapmodels/flo_komode02.mdl
models/mapmodels/mawibse_lamp_01.mdl
models/mapmodels/piano2.mdl
sprites/glow01.spr
Donc je cher a déplacer

/root/facs_ffa/dod/models/mapmodels/bord.mdl
/root/facs_ffa/dod/models/mapmodels/by_furniture_group-wreck.mdl
...
vers
/root/maps/dod_25doors/models/mapmodels/bord.mdl
/root/maps/dod_25doors/models/mapmodels/by_furniture_group-wreck.mdl


Et donc voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh
PATH_SERV="/root/facs_ffa/dod" #Emplacement serveur
PATH_SAVE="/root/maps" #Emplaccement sauvegarde
ls ${PATH_SERV}/maps/*.res > listeres.lst #Listage de fichier qui resence les fichier a sauvegarder
cat listeres.lst | while read RES_FILE #Pour chaque fichier ressource
do
{
        tail -n $(expr `cat ${RES_FILE} | wc -l` - 6) ${RES_FILE} >> fichiers.lst #On ignore les 6 ère ligne, on copie le reste
        temp_name=$(echo ${RES_FILE} | cut -c 25-) #On pré-filtre le nom du sous-dossier de la sauvegarde
        map_name=$(echo ${temp_name%.*}) #On extrait le nom du sous-dossier de la sauvegarde
        echo "mkdir ${PATH_SAVE}/${map_name}" #On crée le sous-dossier de la sauvegarde
        cat fichiers.lst | while read FILE_NEEDED #Pour chaque fichier a sauvegarder
        do
        {
                fileing=${PATH_SERV}/${FILE_NEEDED}
                if test ! -r "$fileing" #On vérifie que le fichier existe
                then
                {
                cd ${PATH_SERV} #On se place a la racine du serveur
                tar -cf ${PATH_SAVE}/${file}/arch.tar ${FILE_NEEDED} #On compresse le fichier AVEC l'arborescence par rapport au serveur
                cd ${PATH_SAVE}/${file}/ #On se place dans le dossier de sauvegarde
                tar -xf arch.tar #On décompresse en recréant l'arborescence
                rm -f arch.tar #On supprime l'archive temporaire
                #echo "${FILE_NEEDED} ne peut-etre copier" >> /root/bug.txt
                }
                else
                {
                echo "${FILE_NEEDED} peut-etre copier" >> /root/ok.txt #On crée un fichier en cas d'erreur
                }
                fi
        }
        done
        rm fichiers.lst #On supprime le fichier de listing temporaire 
}
done
rm listeres.lst #On supprime le fichier de listing des ressources
Ce qui semble ne pas marcher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if test ! -r "$fileing"
Cet if me revoit systématiquement sur une erreur, même quand le fichier existe, si je ne met pas les guillemets il trouve uniquement les fichiers contenant des espaces, les fichiers sans espaces ne sont pas trouvé.

Ce qui n’a pas encore était testé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
cd ${PATH_SERV} #On se place a la racine du serveur
                tar -cf ${PATH_SAVE}/${file}/arch.tar ${FILE_NEEDED} #On compresse le fichier AVEC l'arborescence par rapport au serveur
                cd ${PATH_SAVE}/${file}/ #On se place dans le dossier de sauvegarde
                tar -xf arch.tar #On décompresse en recréant l'arborescence
                rm -f arch.tar #On supprime l'archive temporaire


Merci d'avance pour vos explications, toutes vos remarque seront accueil avec joie du moment qu’elles sont constructives.