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 25/03/2010, à 04: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, à 12: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, à 12: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, à 16: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, à 22: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, à 14: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, à 05: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, à 05: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, à 15: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, à 17: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, à 18: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, à 19: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 wink

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, à 22: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, à 22:02)


-- Lucid Lynx --

Hors ligne

#13 Le 02/04/2010, à 05: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, à 17:15

ElricX

Re : unzip....avec des paramètres très complexe, question pour expert..

un petit up! ;-)

Hors ligne

#15 Le 12/04/2010, à 22: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, à 15: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, à 20: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, à 14: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, à 15: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, à 17: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