Construction d'une enveloppe avec tar

Fermé
richy - 27 juin 2013 à 18:45
 richy - 14 juil. 2013 à 12:04
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.

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
0
mon os est solaris10
0
ce n'est pas le tar le problème, c'est le programme qui me permet de former une 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!
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
30 juin 2013 à 14:44
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 ?
0
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!
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 1/07/2013 à 14:38
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 ?
0
Merci dubcek! je vais l'essayer.

cordiales salutations.
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 1/07/2013 à 16:42
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
$
0
je vais le tester.
Merci dubcek!
0
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!
0