Salut à tous,
J'essaye de décompresser plusieurs fichiers tar.gz contenus dans plusieurs dossiers via a script shell avec une fonction "loop".
l'arborescence c'est semblable a ceci :
/folder/001
/folder/002
/folder/003
A l'intérieur de chaque dossier (001,002,003) j'ai 1, parfois plusieurs fichiers tar.gz.
Mon script c'est ceci :
!/bin/bash
liste_fichier="/folder/"
for fichier in $liste_fichier do
tar -xzvf $fichier/.tar.gz --directory $fichier/
done
exit
Problème:
Le script fonctionne uniquement quand il existe un seul fichier tar.gz dans le dossier.
Si plus d'un fichier tar.gz je reçois le message "tar : : non trouvé dans l'archive"
Autre tests effectués:
- J'ai testé le code suivant à l'intérieur d'un seul dossier (001) contenant plusieurs tar.gz files:
for i in *.tar.gz
do
tar -xzvf $i
done
Et ça marche.
- j'ai essayé de exécuter le code ci-dessus à l'intérieur d'un autre loop dans le fichier shell sans sucées.
Des idées son les bienvenues.
# Quelques suggestions :
Posté par Nodeus . Évalué à 1. Dernière modification le 10 juillet 2018 à 17:12.
Premierment :
Quelques questions complémentaires.
les fichiers à décompresser sont-ils présents dans le répertoire folder.
Doit-on les décompresser dans le même répertoire ?
Je ne pense pas que celui-ci soit fonctionnel
Voici une base elle est à compléter avec les contrôles sur les paramètres et l'usage multi dossier
Ce n'est pas parfait mais ça doit fonctionner
# Reponse
Posté par shellx . Évalué à 0. Dernière modification le 11 juillet 2018 à 11:03.
J'ai avait oublié un détails dans mon script les "*":
!/bin/bash
liste_fichier="/folder/" ## ici
for fichier in $liste_fichier do
tar -xzvf $fichier/.tar.gz --directory $fichier/ ##et ici dans *.tar.gz
done
exit
Maintenant, j'ai bien testé ton code,
Mais pendant l’exécution du script j'ai l'erreur suivant :
ls : impossible d'accéder à /folder//.tar.gz Aucun fichier de ce type
Et le problème survient du fait que:
la variable
prompt> rep="/folder/*"
les résulta de la variable $rep via un echo done
/folder/001 /folder/002 /folder/003 ## jusqu'à ici c'est correct
Mais quand j'attribue "$(ls "$rep"/.tar.gz") " à liste_fichier
prompt> liste_fichier="$(ls "$rep"/.tar.gz") "
je obtien le message de erreur pendant l'execution du script
ls : impossible d'accéder à folder/001//.tar.gz Aucun fichier de ce type
En faite il traite pas la variable "rep" de la même façon quand je l'utilise dans une autre variable.
Ce qu'il a fait il a juste repris rep="/folder/*" et non le résultat de la variable (/folder/001 /folder/002 /folder/003
Donc la question, comment utiliser le résultat d'une variable dans une autre?
[^] # Re: Reponse
Posté par Nodeus . Évalué à 2.
en effet car ce n'est pas ce que j'ai indiqué dans mon post :
J'ai écrit :
rep="/folder" # sans / à la fin
et j'ai également écrit :
liste_fichier=$( ls "$rep"/[wildcard].tar.gz ) # et j'ai bien mis un espace la parenthèse et et ls et entre z et la parenthèse ce qui a une importance syntaxique.
et les guillemet ne sont qu'autour de $rep
si turespecte cette syntaxe ça marche :P
ici le [ wildcard ] remplace l'étoile
La syntaxe a son importance.
[^] # Re: Reponse
Posté par shellx . Évalué à 1.
J'ai bien effectué les corrections, et ça ne marche pas.
J'ai des erreurs :
-bash: {mathjax} : commande introuvable
tar(child) folder/fichier : la focntion open a échoué: aucun fichier de ce type
[^] # Re: Reponse
Posté par Nodeus . Évalué à 1. Dernière modification le 12 juillet 2018 à 15:29.
en fait un truc bizarre c'est passé lors que j'ai écrit dans le forum
pour
"`{mathjax} rep"
il fallait comprendre :
"$rep"
désolé :)
[^] # Re: Reponse
Posté par shellx . Évalué à 1.
Aucun souci,
Mais le batch se términe toujours en échec.
ls: impossible d'accéder à folder/*.tar.gz : aucun fichier de ce type
en effet,
Les tar.gz si trouve dans
/folder/001
/folder/002
/folder/003
[^] # Re: Reponse
Posté par Nodeus . Évalué à 1.
dans ce cas il faut préciser le cahier des charges :D
# Double post
Posté par Anthony Jaguenaud . Évalué à 1.
Tu as fait un double post, j’ai répondu ici
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.