Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/09/2012, à 15: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, à 16:34)

Hors ligne

#2 Le 26/09/2012, à 16: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 26/09/2012, à 16: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, à 16: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 26/09/2012, à 17: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, à 17:43

pingouinux

Re : [Résolu] problème de recursion avec tar

zoulbiba #5 a écrit :

-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, à 19: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#8 Le 27/09/2012, à 09: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, à 09:37)

Hors ligne

#9 Le 27/09/2012, à 09: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, à 16: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 27/09/2012, à 16: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, à 16:58)

Hors ligne

#12 Le 27/09/2012, à 17:03

pingouinux

Re : [Résolu] problème de recursion avec tar

zoulbiba #11 a écrit :

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, à 17: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, à 17: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, à 17: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, à 10: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, à 11:20)

Hors ligne

#16 Le 28/09/2012, à 11: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, à 14: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, à 16: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, à 17:01

nesthib

Re : [Résolu] problème de recursion avec tar

peux-tu poster le contenu de ton crontab ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#20 Le 02/10/2012, à 08: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, à 19:36)

Hors ligne

#21 Le 02/10/2012, à 09: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, à 14: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, à 15: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, à 15: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, à 15:44)

Hors ligne

#25 Le 03/10/2012, à 16: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