Construction d'une enveloppe avec tar

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.

3 réponses

  1. MoRoSKiT
     
    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
    1. richy
       
      mon os est solaris10
      0
    2. richy
       
      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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. richy
       
      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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. richy
       
      Merci dubcek! je vais l'essayer.

      cordiales salutations.
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
    3. richy
       
      je vais le tester.
      Merci dubcek!
      0
    4. richy
       
      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