#1 Le 25/03/2010, à 03:37
- ElricX
unzip....avec des paramètres très complexe, question pour expert..
Bonjour, j'ai plusieurs fichiers zip qui contiennent plusieurs fichiers mais dont je ne veux que les *.doc. Je voudrais de plus que le fichier extrait obtienne le nom de l'archive dans lequel il se trouvais. De plus je veux que tout les fichier extrait soit dans le même répertoire. Je crois qu'il faut ajouter des expression régulière et du awk si je ne m'abuse pour y parvenir?
J'ai regarder dans le man d'unzip mais la je crois que sa prend plus que sa pour réussir...
Il faut que je puisse faire le tout en ligne de commande. Je n'ai pas accès à une interface graphique...
Merci
Hors ligne
#2 Le 25/03/2010, à 11:14
- francoisp31
Re : unzip....avec des paramètres très complexe, question pour expert..
tu vas être obligé de faire un petit script pour ça
pour toute archive dans le répertoire
faire
variable=nom_archive_analyse_en_cours
variable=liste_doc_dans_archive_analyse_en_cours
extraction_fichier vers_/chemin_repertoire_destination/son nom_archive_analyse_en_cours$(date +%Y%m%d%H%m%s)nom_du_fichier_.doc
fin de boucle
le date sers juste à garantir que le nom de fichier est unique ! quoi qu'il arrive
ça genère donc un fichier ARCHIVENAME20100324113217toto.doc par exemple
Dernière modification par francoisp31 (Le 25/03/2010, à 11:19)
Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.
Hors ligne
#3 Le 25/03/2010, à 15:12
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Merci, est-ce que tu pourrais me donner un exemple plus concret. En DOS avec une batch file je suis pas mal à l'aise mais sous linux pas vraiment. Ou as-tu un lien sur de la doc à se sujet? Sa ne me dérange pas de faire mes "devoirs" avant que quelqu'un me souffle la réponse... ;-)
Amicalement,
Hors ligne
#4 Le 25/03/2010, à 21:39
- Totor
Re : unzip....avec des paramètres très complexe, question pour expert..
Bonsoir,
on va te le faire ton exo :
for fichier in *.zip;
do
unzip -l ${fichier}|awk ' NF >=4 && $1 ~ /^[[:digit:]]+$/ {$1=$2=$3="";print} '|grep \.doc$|xargs -I{} unzip -c ${fichier} "{}" > ${fichier%.zip}.doc
done
Par contre, ça ne fonctionnera que si il n'y a qu'un seul fichier doc dans ton zip
-- Lucid Lynx --
Hors ligne
#5 Le 26/03/2010, à 13:09
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Ok merci pour le script, je vais le tester dès que je serai à la maison. Je vais tenter maintenant de décortiquer cette super ligne...
Merci BEAUCOUP.
On traverse la rivière un pas à la fois.....
Hors ligne
#6 Le 31/03/2010, à 04:25
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Bon sa fonctionne en partie. Il se trouve que j'ai certains fichier zip qui ont des sous-répertoire dans lequel se trouve le fichier .doc
Lorsque que le script arrive sur ce fichier il crée un fichier avec la bon nom cependant il est de 0 octets! J'imagine qu'il n'arrive pas à aller dans le sous-répertoire pour extraire le fichier...
Hors ligne
#7 Le 31/03/2010, à 04:42
- Pacifick_FR42
Re : unzip....avec des paramètres très complexe, question pour expert..
bon... chuis pas expert mais...
unzip tonfichier.zip dans un répertoire heu... : ZipRepertoire
cp -R ZipRepertoire/*.doc /DocRepertoire
zip ZipRepertoire/*
vlà... j'espère que...
Hors ligne
#8 Le 31/03/2010, à 14:26
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Bon voici ce que j'ai réussi à obtenir avec l'aide d'un ami... mon dernier souci est que lorsque le sous-répertoire ne comporte pas d'espace dans le nom du dossier tout fonctionne. Parcontre s'il y a un espace alors ma commande awk extrait pas correctement l'info.
#!/bin/sh
#Archive: blablabla.zip
# Length Date Time Name
# -------- ---- ---- ----
# 5 03-29-10 08:52 test.doc
# 0 03-12-10 09:52 toto/
# 0 03-31-10 08:32 toto/test 2/
# 0 03-31-10 08:32 toto/test 2/blabla.doc
# -------- -------
# 5 4 files
for zipfile in /home/patrick/Bureau/dossiers/zip/*.zip; do
destfile=$(echo "$zipfile" | sed 's/\.zip/.doc/')
file_to_unzip=$( unzip -l $zipfile | grep -i "\.doc$" | awk '{print $NF}')
echo "file_to_unzip"
unzip -p $zipfile "$file_to_unzip" >$destfile
done
Hors ligne
#9 Le 31/03/2010, à 16:34
- Pacifick_FR42
Re : unzip....avec des paramètres très complexe, question pour expert..
et le poste #7... non...? il te faut à tous prix un script...? ça fait +geek..?
Hors ligne
#10 Le 31/03/2010, à 17:55
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Salut, je comprends l'idée mais étant donné que c'est une chose que je vais avoir besoin régulièrement. Je veux l'automatisé au maximum. De plus je vois la chose comme de la pédagogie. ;-) Si un jour je veux maitriser le scripting sous linux vaut mieux se trouver des raisons d'en faire! ;-)
Amicalement,
Hors ligne
#11 Le 31/03/2010, à 18:05
- Pacifick_FR42
Re : unzip....avec des paramètres très complexe, question pour expert..
ok, disons que je table habituellement dans l'efficacité, sur le plan pédagogie, déployer un char d'assaut pour tuer une mouche n'a rarement l'effet escompté, sauf dans les esprits les plus crédules... mais je comprends l'approche
Pour ton problème d'espace dans les noms de dossier ou ficchier, entours le de guillemet ("Le répertoire à des espace/c est pas grave/") si le nom est dans une variable, idem, entours la variable avec "".
Hors ligne
#12 Le 31/03/2010, à 21:02
- Totor
Re : unzip....avec des paramètres très complexe, question pour expert..
Bonsoir,
Il y a une légère erreur d'option dans mon premier script.
D'autre part, si tu as des espaces dans tes nms de fichiers, ll faut protéger tes variables :
for fichier in *.zip
do
unzip -l "${fichier}"|awk ' NF >=4 && $1 ~ /^[[:digit:]]+$/ {$1=$2=$3="";print} '|grep \.doc$|xargs -I{} unzip -p "${fichier}" "{}" > "${fichier%.zip}.doc"
done
j'ai testé avec des fichiers zip et/ou donc contenant des espaces. pas de problème
Dernière modification par Totor (Le 31/03/2010, à 21:02)
-- Lucid Lynx --
Hors ligne
#13 Le 02/04/2010, à 04:39
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Merci totor! Mais sa ne fonctionne toujours pas (sa créer des fichiers de 0octets)... Y-a-t-il un moyen que je puisse vérifier étape par étape ta commande?
Voici le contenu d'un de mes zip.
Zip#1 (sans sous-répertoire)
Archive: [Rules] X-Men.zip
Length Date Time Name
--------- ---------- ----- ----
131216 2000-06-21 17:03 x-men.doc
--------- -------
131216 1 file
Zip#2 (avec sous-répertoire)
Archive: [Rules] Addams Family Pugsley's Scavenger Hunt.zip
Length Date Time Name
--------- ---------- ----- ----
262288 1999-10-01 12:33 Addams Family Pugsley's Scavenger Hunt/AddamPug.doc
0 2002-02-17 21:04 Addams Family Pugsley's Scavenger Hunt/
--------- -------
262288 2 files
Hors ligne
#14 Le 08/04/2010, à 16:15
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
un petit up! ;-)
Hors ligne
#15 Le 12/04/2010, à 21:25
- johndo
Re : unzip....avec des paramètres très complexe, question pour expert..
Bonsoir,
Que donne ceci ?
for fichier in *.zip
do
unzip -l "${fichier}"|awk ' NF >=4 && $1 ~ /^[[:digit:]]+$/ {$1=$2=$3="";print} '|grep \.doc$|xargs -I{} echo unzip -p "${fichier}" "{}" > "${fichier%.zip}.doc"
done
Hors ligne
#16 Le 13/04/2010, à 14:45
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
Idem, tout mes fichiers sont de 0 octets ;-(((
Hors ligne
#17 Le 13/04/2010, à 19:09
- johndo
Re : unzip....avec des paramètres très complexe, question pour expert..
Et ceci :
for fichier in *.zip
do
unzip -l "${fichier}"|awk ' NF >=4 && $1 ~ /^[[:digit:]]+$/ {$1=$2=$3="";print} '|grep \.doc$|xargs -I{} echo unzip -p "${fichier}" "{}" \> "${fichier%.zip}.doc"
done
Hors ligne
#18 Le 14/04/2010, à 13:50
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
la il n'y a plus rien qui s'extrait! Sa ne crée plus rien.
Hors ligne
#19 Le 14/04/2010, à 14:13
- Totor
Re : unzip....avec des paramètres très complexe, question pour expert..
mais ça doit t'afficher quelque chose à l'écran puisque ce que te demande johndo de faire est d'afficher les commande de dézipage
-- Lucid Lynx --
Hors ligne
#20 Le 14/04/2010, à 16:12
- ElricX
Re : unzip....avec des paramètres très complexe, question pour expert..
je lance la commande et après un certain temps je reviens au prompt. Je n'ai rien d'afficher dans le terminal. Mon script .sh est situé dans le répertoire qui contient les fichierset je lui ai mis les droit d'exécution. J'ai essayer avec #! /bin/sh et #! /bin/bash et sa change rien non plus.
Hors ligne