Menu

Concaténation de fichiers gz en ligne de commande [Résolu]

pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 5 févr. 2018 à 15:52 - Dernière réponse : pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention
- 22 févr. 2018 à 17:11
Bonjour,

J'ai des fichiers nommés :

fichier1.gz
fichier2.gz
fichier3.gz
fichier4.gz
etc..


et des fichiers nommés :

fichier1_src.gz
fichier2_src.gz
fichier3_src.gz
fichier4_src.gz
etc..


et je souhaiterais concaténer ses fichiers par leur numéro c'est a dire :

fichier1.gz avec fichier1_src.gz
fichier2.gz avec fichier2_src.gz
fichier3.gz avec fichier3_src.gz
fichier4.gz avec fichier4_src.gz
etc..


Comment faire et avec quelle(s) commandes(s).

Merci beaucoup



Afficher la suite 

15 réponses

Répondre au sujet
Exileur 1190 Messages postés mercredi 31 août 2011Date d'inscription 18 février 2018 Dernière intervention - 6 févr. 2018 à 06:47
0
Utile
3
Hello,

on appel ca merger :)

Tu dois pouvoir faire un script en bash qui fait ca.

a plus dans lbus
Exileur 1190 Messages postés mercredi 31 août 2011Date d'inscription 18 février 2018 Dernière intervention - 6 févr. 2018 à 09:17
man tar

:)
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 6 févr. 2018 à 09:44
L'option -A de tar permet de concaténer mais le souci est que je souhaite concaténer les ficheirs selon leur numéro présent dans leur nom donc fichier1 avec fichier1srv et j'en ai plus de 100 donc je peux pas m'amuser a faire cela manuellement.
Exileur 1190 Messages postés mercredi 31 août 2011Date d'inscription 18 février 2018 Dernière intervention - 6 févr. 2018 à 11:54
faut faire un truc genre

for i in seq 1 10
do
tar nomdefichier-$i.gz nomdefichier_different$i.gz
done


ou 10 = l'id maximum de ton fichier
Commenter la réponse de Exileur
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 6 févr. 2018 à 07:47
0
Utile
Oui merci cela je me doute que l'on peut faire cela dans un script mais cela ne me donne pas plus d'info!
Commenter la réponse de pcsystemd
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 6 févr. 2018 à 08:31
0
Utile
3
hello
ce sont des fichiers texte ?
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 6 févr. 2018 à 08:50
Hello,

Ce sont des logs apache zippés en logs.gz

en fait j'ai deux serveurs apaches et je dois concaténer les logs du serveur 1 et du serveur 2.

Les logs du serveur 1 sont nommés :
access.log.1.gz
access.log.2.gz
etc..

et les fichiers du serveur 2 :

access.log.1.srv.gz
access.log.2.srv.gz
etc..

Merci
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 6 févr. 2018 à 11:38
comment doit s'appeller le fichier de destination ?
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 6 févr. 2018 à 12:27
en appellant la destination access_new.log.*.gz
shopt -s extglob
for f in access.log.+([0-9]).gz; do gzip -cd $f ${f/.gz/.srv.gz} | gzip -c > ${f/./_new.}; done

les fichiers originaux ne sont pas modifiés
Commenter la réponse de dubcek
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 6 févr. 2018 à 12:35
0
Utile
1
Pour chaque concaténation de deux fichiers, il doit s'appeller : acces.log.1.merged.gz par exemple donc :

acces.log.1.merged.gz
acces.log.2.merged.gz
etc..
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 6 févr. 2018 à 12:55
shopt -s extglob
for f in access.log.+([0-9]).gz; do gzip -cd $f ${f/.gz/.srv.gz} | gzip -c > ${f/.gz/.merged.gz}; done
Commenter la réponse de pcsystemd
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 6 févr. 2018 à 14:16
0
Utile
1
Merci dubcek comme d'hab tu m'as sauvé!

J'ai parcouru et compris ta commande qui sincèrement est trop complexe pour moi. De plus je ne connaissais pas la commande shopt.
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 6 févr. 2018 à 15:23
shopt -s extglob pour que bash traite +([0-9]) (1 ou plusieurs chiffres) dans les noms de fichier, cf : Pathname Expansion
Commenter la réponse de pcsystemd
dubcek 17292 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 février 2018 Dernière intervention - 7 févr. 2018 à 07:47
0
Utile
il n'y a pas besoin de décompresser pour concaténer, ceci suffit
shopt -s extglob
for f in access.log.+([0-9]).gz; do cat $f ${f/.gz/.srv.gz} > ${f/.gz/.merged.gz}; done
Commenter la réponse de dubcek
pcsystemd 532 Messages postés dimanche 27 novembre 2005Date d'inscription 22 février 2018 Dernière intervention - 22 févr. 2018 à 17:11
0
Utile
Cool merci
Commenter la réponse de pcsystemd