#1 Le 26/09/2012, à 16:54
- zoulbiba
[Résolu] problème de recursion avec tar
Bonjour,
je dois mettre en place un script pour récupérer et compresser tous les fichiers doc, xls , txt et pdf contenu dans un répertoire (ici commun) et dans ces sous-répertoires.
*lorsque j'utilise la commande suivante le tar qui est censé être récursif ne l'est pas :
==> tar zcvf commun.tgz *.txt *.xls *.doc *.pdf
dans le commun.tgz je ne retrouve aucun des fichiers contenu dans les sous-répertoires.
idem pour la commande :
==> tar zcvf commun.tgz --recursion *.tgz --recursion *.xls --recursion *.doc --recursion *.pdf
*Je me suis alors dirigé vers la commande find -exec et je suis parvenu au résultat voulu seulement lorsque j'automatise la commande via CRON elle ne marche que sur un serveur sur deux ... sans que je ne trouve d’explication logique.
==> find . \( -name '*.xls' -o -name '*.txt' -o -name '*.doc' -o -name '*.pdf' \) -exec cp {} DOSSIER_TEST \;
puis je tar le répertoire DOSSIER_TEST
Cette méthode ne marchant que sur 1 serveur sur 2 et tous les fichiers se trouvant en bordel dans le même répertoire j'ai renoncé à cette façon de faire.
*après plusieurs heures de recherche et pleins de cheveux en moins j'ai décidé d'utiliser la commande tar --exclude
seulement voila la commande :
==> tar zcvf commun.tgz --exclude '*.a*' --exclude '*.b*' --exclude '*.db' --exclude '*.D*' --exclude '*.e*' --exclude '*.f*' --exclude '*.g*' --exclude '*.h*' --exclude '*.g*' --exclude '*.h*' --exclude '*.g*' --exclude '*.i*' --exclude '*.j*' --exclude '*.k*' --exclude '*.l*' --exclude '*.m*' --exclude '*.n*' --exclude '*.o*' --exclude '*.q*' --exclude '*.r*' --exclude '*.s*' --exclude '*.u*' --exclude '*.v*' --exclude '*.w*' --exclude '*.y*' --exclude '*.zip' --exclude '*.M*' --exclude '*.P*' --exclude '*.Y*' --exclude '*.H*' --exclude '*.I*' --exclude '*.dl*' --exclude '*.dt*' --exclude '*.X*' --exclude '*.N*' --exclude '*.E*' --exclude '*.B*' -- exclude '*.c*' --exclude '*.to*' --exclude '*.p*' --exclude '*.xm*' --exclude '*.c*' /home/partages/commun
J'aimerai améliorer cette commande et faire quelque chose comme ça : tar zcvf commun.tgz --exclude "TOUT" sauf (*.txt *.xls *.pdf *.doc)
merci de votre aide
Dernière modification par zoulbiba (Le 01/10/2012, à 17:34)
Hors ligne
#2 Le 26/09/2012, à 17:27
- nesthib
Re : [Résolu] problème de recursion avec tar
find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' | xargs tar zcvf commun.tgz
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 26/09/2012, à 17:46
- pingouinux
Re : [Résolu] problème de recursion avec tar
Bonjour,
Tu peux aussi utiliser la commande tar comme ceci :
shopt -s globstar
tar zcvf commun.tgz **/*.txt **/*.xls **/*.doc **/*.pdf
Hors ligne
#4 Le 26/09/2012, à 17:57
- nesthib
Re : [Résolu] problème de recursion avec tar
Attention toutefois au nombre de fichiers présents dans les sous dossiers. S'il est très grand la commande risque de ne pas fonctionner (mais dans ce cas, la mienne risque de fonctionner anormalement aussi). Pour pallier à ce problème il faudrait utiliser ma commande avec l'option -A de tar (qui n'est pas compatible avec la compression), puis faire une étape de compression quand le tar est généré.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 26/09/2012, à 18:14
- zoulbiba
Re : [Résolu] problème de recursion avec tar
-En effet Nesthib ta commande marche partiellement, au début tout se passe bien puis plein d'erreurs surviennent " tar: synthese.doc : stat impossible: Aucun fichier ou dossier de ce type".
Lorsque je regarde mon dossier archiver (commun.tgz) je retrouve l'arborescence et les fichiers voulu mais incomplet du aux erreurs.
-Pingouinux ta commande marche mais ne me permet pas de récupérer les fichiers contenu dans les sous-dossier. Dans le répertoire de base j'ai des sous-dossiers qui contiennent d'autres sous-dossiers etc...
merci de vos réponses je repasserai demain faire d'autre tests et essayer de trouver une solutions ^^
Hors ligne
#6 Le 26/09/2012, à 18:43
- pingouinux
Re : [Résolu] problème de recursion avec tar
-Pingouinux ta commande marche mais ne me permet pas de récupérer les fichiers contenu dans les sous-dossier. Dans le répertoire de base j'ai des sous-dossiers qui contiennent d'autres sous-dossiers etc...
As-tu bien lancé les deux commandes que je t'ai indiquées en #3 ?
Hors ligne
#7 Le 26/09/2012, à 20:48
- nesthib
Re : [Résolu] problème de recursion avec tar
que te donne la commande :
find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' | wc -l
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#8 Le 27/09/2012, à 10:11
- zoulbiba
Re : [Résolu] problème de recursion avec tar
En effet Pingouinux je n'avais pas lancé les 2 commandes et en faite cela semble marcher à la perfection .
Reste un petit détail a voir car lorsque je lance la commande de Nesthib : ==> find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' | wc -l cela me renvoie 1655 fichiers trouvés dans le répertoire d'origine et lorsque j'effectue cette même commande sur le dossier obtenu avec la commande de Pingouinux cela me renvoie 1651 fichiers trouvés.
Je vais regarder ça et pas tarder a mettre problème résolu encore merci !
PS : Euh je ne serais pas contre quelques explications quand a ta commande shopt -s globstar
Dernière modification par zoulbiba (Le 27/09/2012, à 10:37)
Hors ligne
#9 Le 27/09/2012, à 10:29
- pingouinux
Re : [Résolu] problème de recursion avec tar
@zoulbiba #8 :
La différence peut provenir de fichiers dont le suffixe est en majuscules, pris en compte par la commande de nesthib, mais pas par la mienne.
Hors ligne
#10 Le 27/09/2012, à 17:18
- nesthib
Re : [Résolu] problème de recursion avec tar
@zoulbiba : le « shopt -s globstar » demande à bash de considérer la séquence « ** » comme une récursion sur les sous-dossiers. Sinon j'ai relu ton message d'erreur et je viens de réaliser que tu dois avoir des fichiers avec des espaces dans le nom. Essaie avec :
find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' -print0 | xargs -0 tar zcvf commun.tgz
Sinon, ma remarque est toujours valable, ici tu as un millier de fichiers, si tu devais en avoir dix fois plus, il est possible que le nombre d'arguments devienne trop grand pour réaliser correctement la commande.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#11 Le 27/09/2012, à 17:54
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Pingouinux tes deux commandes marchent bien mais lorsque je les met dans un script cela me renvoie l'erreur suivante:
line 36: shopt: globstar: invalid shell option name.
Du coup la récursion n'est plus faite.
Nesthib ta commande ==find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' -print0 | xargs -0 tar zcvf commun.tgz== marche.
Me reste plus qu'à la tester dans un script, mais la pas le courage je verrais cela demain.
encore merci
Dernière modification par zoulbiba (Le 27/09/2012, à 17:58)
Hors ligne
#12 Le 27/09/2012, à 18:03
- pingouinux
Re : [Résolu] problème de recursion avec tar
Pingouinux tes deux commandes marchent bien mais lorsque je les met dans un script cela me renvoie l'erreur suivante:
line 36: shopt: globstar: invalid shell option name.
Est-ce bien un script bash ?
La première ligne doit être :
#!/bin/bash
Ce qui m'étonne, c'est que dans un script sh, cette commande me renvoie un message différent du tien :
./x: 2: ./x: shopt: not found
Hors ligne
#13 Le 27/09/2012, à 18:12
- AnsuzPeorth
Re : [Résolu] problème de recursion avec tar
Bjr,
globstar est pour bash > 4, pi être une version antérieure est utilisée ?
bash --version
Peut être ajouter l'option nocaseblog pour la casse ?
Dernière modification par AnsuzPeorth (Le 27/09/2012, à 18:14)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#14 Le 27/09/2012, à 18:25
- pingouinux
Re : [Résolu] problème de recursion avec tar
@AnsuzPeorth #13 : Petite inversion, c'est nocaseglob
Hors ligne
#15 Le 28/09/2012, à 11:30
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Mon script est bien un script bash.
Je dois déployer ce script sur plusieurs serveurs et sur celui que je test la version est antérieur à bash 4.
Je vas plutôt m'orienter vers la commande de Nesthib que de me lancer dans des mise à jour qui pourraient entraîner d'autres problèmes.
Dernière modification par zoulbiba (Le 28/09/2012, à 12:20)
Hors ligne
#16 Le 28/09/2012, à 12:39
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Je tourne en rond...
La commande == find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' -print0 | xargs -0 tar zcvf commun.tgz == ne Nesthib ne marche bien que lorsque je la lance en local ( j'ai fait une copie du répertoire en question d'un des serveurs sur mon ordi pour faire des test). Donc en local je récupère bien tous les fichiers voulu.
Mais si je la lance depuis l'un des serveurs je n'ai qu'un seul sous-répertoire dans mon fichier tgz et ne récupère donc quasi aucun des fichiers voulu...
Je n'ai pourtant aucun message d'erreur et lorsque je regarde la commande travailler il me liste bien tous les fichiers voulu.
Hors ligne
#17 Le 28/09/2012, à 15:45
- credenhill
Re : [Résolu] problème de recursion avec tar
hello
et avec le find de nesthib et
find ton_dossier -iregex '.*.\(txt\|xls\|doc\|pdf\)' | tar -T - -zcvf commun.tgz
Hors ligne
#18 Le 01/10/2012, à 17:31
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Bonjour Credenhill ta commande marche bien lorsque je la lance à la main mais ne marche pas quand j'essaye de l'automatiser via CRONTAB.
Finalement je crois que mon problème reste CRONTAB je vais donc aller trifouiller à droite à gauche et sûrement revenir poster sur ce site.
Encore merci les gens pour toutes ces solutions.
Hors ligne
#19 Le 01/10/2012, à 18:01
- nesthib
Re : [Résolu] problème de recursion avec tar
peux-tu poster le contenu de ton crontab ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#20 Le 02/10/2012, à 09:39
- zoulbiba
Re : [Résolu] problème de recursion avec tar
voici le crontab :
00 23 * * 1-5 /home/localsave/bin/sauvegarde_local.sh residence
et voici le script
#!/bin/bash
DATE=`date +%A`
#Indique le jour de la date actuelle
DH=/home/localsave/donnees_heberg
DA=/home/localsave/donnees_accueil
#DG=/home/localsave/donnees_garone
DC=/home/localsave/commun
#chemins des donnees/repertoires a sauvegarder
SH=/home/localsave/sauve_heberg
SA=/home/localsave/sauve_accueil
#SG=/home/localsave/sauve_garone
SC=/home/localsave/sauve_commun
#chemins ou les donnees/repertoire seront sauvegardees et stockees
case $1 in
residence)
#Serveurs residences
############# ACCUEIL #############
cd $DA
tar zcvf $SA/accueil_$DATE.tgz *
############# HEBERG #############
cd $DH
tar zcvf $SH/heberg_$DATE.tgz *
############# COMMUN #############
cd $DC/..
find commun -iregex '.*.\(txt\|xls\|doc\|pdf\)' | tar -T - -zcvf $SC/commun_$DATE.tgz
;;
restaurant)
#Serveurs restaurants
############# GARONE #############
#cd $DG
#tar zcvf $SG/garone_$DATE.tgz *
############# COMMUN #############
cd $DC/..
find commun -iregex '.*.\(txt\|xls\|doc\|pdf\)' | tar -T - -zcvf $SC/commun_$DATE.tgz
;;
esac
edit modo : merci d'utiliser les balises [ code ]
Dernière modification par nesthib (Le 02/10/2012, à 20:36)
Hors ligne
#21 Le 02/10/2012, à 10:58
- credenhill
Re : [Résolu] problème de recursion avec tar
capturer messages et erreurs
00 23 * * 1-5 /home/localsave/bin/sauvegarde_local.sh residence >> /tmp/log 2>&1
Hors ligne
#22 Le 03/10/2012, à 15:34
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Bonjour Credenhill j'ai rajouter >> /tmp/log 2>&1
Lorsque je regarde le fichier log il n'y a rien. Il a bien été créer mais il est vide.
j'ai l'impression que seule la fin de la commande est prise en compte par la CRONTAB car le fichier commun_$DATE.tgz est bien crée mais il est vide.
Hors ligne
#23 Le 03/10/2012, à 16:03
- credenhill
Re : [Résolu] problème de recursion avec tar
tout les tar ayant l'option v, log ne devrait pas être vide
place en 2ème ligne du script
set -x
pour voir ce qu'il fait
Hors ligne
#24 Le 03/10/2012, à 16:23
- zoulbiba
Re : [Résolu] problème de recursion avec tar
Le contenu du fichier log après ajout de set -x :
++ date +%A
+ DATE=Wednesday
+ DC=/home/localsave/commun
+ SC=/home/localsave/sauve_commun
+ find commun -iregex '.*.\(txt\|xls\|doc\|pdf\)'
+ tar -T - -zcvf /home/localsave/sauve_commun/commun_Wednesday.tgz
J'avais éliminer toutes les parties du script qui ne m’intéressent pas afin de limiter lse problèmes.
Au vu du contenu du log je suppose que CRON ne gére pas la commande ( find commun -iregex '.*.\(txt\|xls\|doc\|pdf\)' | tar -T - -zcvf $SC/commun_$DATE.tgz ) comme il faudrait.
Dernière modification par zoulbiba (Le 03/10/2012, à 16:44)
Hors ligne
#25 Le 03/10/2012, à 17:13
- pingouinux
Re : [Résolu] problème de recursion avec tar
Bonjour,
D'après les sorties du #24, il semble manquer la première de ces 2 lignes :
cd $DC/..
find commun -iregex '.*.\(txt\|xls\|doc\|pdf\)' | tar -T - -zcvf $SC/commun_$DATE.tgz
Hors ligne