Construction d'une enveloppe avec tar
richy
-
richy -
richy -
bonjour!
Sur mon serveur central dans le repertoire /home/sortie/encours, les structures (001,002,.........,099) génèrent 04 fichiers à envoyer aux différentes agences (00101,00102,........,00500) de mon réseau.
code structure (001,002,...............,099)
code agence (00101,00102,.................,00500)
Remarque : deux ou plusieurs structures différentes peuvent générer des fichiers pour la même agence
format des 04 fichiers:
att_top_sss_aaaaa_jjmmaaaa_xxxxx
att_lig_sss_aaaaa_jjmmaaaa_xxxxx
att_gar_sss_aaaaa_jjmmaaaa_xxxxx
att_obs_sss_aaaaa_jjmmaaaa_xxxxx
att_top ; att_lig ; att_gar ; att_obs non distinguant les 04 fichiers.
sss: code structure émettrice
aaaaa: code agence destinataire
jjmmaaaa: date du jour de génération du fichier
xxxxx: numero séquentiel (00001, 00002, ..........0000n)
je veux former un enveloppe qui regroupe les 04 fichiers de chaque agence selon la structure émettrice avec un tar cvf , sous le nom : att_sss_aaaaa_jjmmaaaa_xxxxx
Merci d'avance!
cordiales salutations.
Sur mon serveur central dans le repertoire /home/sortie/encours, les structures (001,002,.........,099) génèrent 04 fichiers à envoyer aux différentes agences (00101,00102,........,00500) de mon réseau.
code structure (001,002,...............,099)
code agence (00101,00102,.................,00500)
Remarque : deux ou plusieurs structures différentes peuvent générer des fichiers pour la même agence
format des 04 fichiers:
att_top_sss_aaaaa_jjmmaaaa_xxxxx
att_lig_sss_aaaaa_jjmmaaaa_xxxxx
att_gar_sss_aaaaa_jjmmaaaa_xxxxx
att_obs_sss_aaaaa_jjmmaaaa_xxxxx
att_top ; att_lig ; att_gar ; att_obs non distinguant les 04 fichiers.
sss: code structure émettrice
aaaaa: code agence destinataire
jjmmaaaa: date du jour de génération du fichier
xxxxx: numero séquentiel (00001, 00002, ..........0000n)
je veux former un enveloppe qui regroupe les 04 fichiers de chaque agence selon la structure émettrice avec un tar cvf , sous le nom : att_sss_aaaaa_jjmmaaaa_xxxxx
Merci d'avance!
cordiales salutations.
3 réponses
-
Déjà référe toi au man de ton OS, car il n'y a pas toujours les mêmes commandes dessus. c'est quoi l'OS?
http://manpages.ubuntu.com/manpages/gutsy/fr/man1/tar.1.html -
hello
qu'est ce qu'une enveloppe ? un fichier tar appellé att_sss_aaaaa_jjmmaaaa_xxxxx qui contient tout les fichiers de l'agence aaaaa ?-
enveloppe = une archive avec tar cvf c'est à dire :
exemple pour l'agence 00101 qui à reçu ses 04 fichiers de la structure 005 en date du 27062013 avec le numéro séquentiel 00001 on aura l'archive suivante:
tar cvf att_005_00101_27062013_00001 /home/sotie/encours/att_top_005_00101_27062013_00001 /home/sotie/encours/att_lig_005_00101_27062013_00001 /home/sotie/encours/att_gar_005_00101_27062013_00001 /home/sotie/encours/att_obs_005_00101_27062013_00001
la même agence 00101 à reçu 04 autres fichiers de la structure 002 la même date avec le numero séquentiel 00002 --> on aura l'archive ou l'enveloppe suivante
tar cvf att_002_00101_27062013_00002 /home/sotie/encours/att_top_002_00101_27062013_00002 /home/sotie/encours/att_lig_002_00101_27062013_00002 /home/sotie/encours/att_gar_002_00101_27062013_00002 /home/sotie/encours/att_obs_002_00101_27062013_00002
.
.
etc pour les autres agences je dois construire une archive pour toute les agences pour les 04 fichiers reçus d'une structure quelconque.
cordiales salutations dubcek!
merci!
-
-
soit l'arborescence:
$ find home|sort -t _ -k 3 home home/sortie home/sortie/encours home/sortie/encours/att_gar_002_00101_27062013_00002 home/sortie/encours/att_lig_002_00101_27062013_00002 home/sortie/encours/att_obs_002_00101_27062013_00002 home/sortie/encours/att_top_002_00101_27062013_00002 home/sortie/encours/att_gar_005_00101_27062013_00001 home/sortie/encours/att_lig_005_00101_27062013_00001 home/sortie/encours/att_obs_005_00101_27062013_00001 home/sortie/encours/att_top_005_00101_27062013_00001
on construit les commandes tar :$ find home | awk -F "/" '/_/ {sub("_[^_]*_", "_", $NF); if(!t[$NF]++){printf "tar -cf " $NF; sub("_", "_*_", $NF); print " home/sortie/encours/" $NF} }' tar -cf att_002_00101_27062013_00002 home/sortie/encours/att_*_002_00101_27062013_00002 tar -cf att_005_00101_27062013_00001 home/sortie/encours/att_*_005_00101_27062013_00001 $
quelque chose comme ça ?-
-
pour exécuter, il suffit d'ajouter à la commande : | bash
plus dense:$ find home -type f -printf "tar -cf %f %p\n" | awk '{sub("_[^_]*", ""); sub("_[^_]*", "_*", $4) } !t[$3]++' tar -cf att_002_00101_27062013_00002 home/sortie/encours/att_*_002_00101_27062013_00002 tar -cf att_005_00101_27062013_00001 home/sortie/encours/att_*_005_00101_27062013_00001 $ -
-
Salut dubcek!
tu n'as pas une solution moins complexe!
j'ai trouvé avec la boucle for:
cd /home/sotie/encours/
ls /home/sotie/encours/ > /home/sotie/liste
for file in 'cat /home/sotie/liste'
do
echo "$file" > /home/sotie/Fich
SS=' cut -c9-32 /home/sotie/Fich'
export SS
sed "/$SS/d" /home/sotie/liste > /home/sotie/reste
tar cvf att_$SS /home/sotie/att*_$SS
compress att_$SS
cp /home/sotie/reste /home/sotie/liste
done
exit
cordiales salutations!
-