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 17/06/2005, à 18:01

meskiangasher

Script shell pour le parcours récursif d'un repertoire

Bonjour.

Je cherche à dézipper tous les fichiers d'un répertoire et de ses sous-répertoires.

N'ayant pas trouvé de commande ad-hoc et pour éviter de tout refaire, j'ai pensé que le plus simple serait de modifier un script de parcours récursif de l'arborescence d'un répertoire.

Savez-vous où en trouver un ?

PS : je sais que c'est un grand classique de la programmation shell, vous excuserez le newbie que je suis ...

Hors ligne

#2 Le 17/06/2005, à 18:27

devloop

Re : Script shell pour le parcours récursif d'un repertoire

tu peux utiliser la commande find :
find . -type f -name "*.zip" -exec unzip {} \;
en étant dans le répertoire du début

Hors ligne

#3 Le 17/06/2005, à 18:32

coffee

Re : Script shell pour le parcours récursif d'un repertoire

c'est pas un grand classique et c'est chaud à faire

for i in ` find . -name *.zip`
do
          echo "extraction de $i"
          unzip $i -d `echo "$i" | sed 's/\//\n/g' | sed '$d' | awk '{printf "%s/", $0 }' | sed 's/\/\//\//g'`
done

si les fichiers ont pas d'espaces, ça devrait être ok.
pas besoin de recursif à tous les coups wink

le recursif en bash est une tres mauvaise idée d'ailleurs.


Nom d'un tupperware habillé en streetware mangeant de la confiture de pouère et qui se dite où est-ce que je suis ouère !
Tiens mon blog
Les blagues sous forme de fausses aides sont susceptible de ban (ex: rm)

Hors ligne

#4 Le 17/06/2005, à 19:13

meskiangasher

Re : Script shell pour le parcours récursif d'un repertoire

Merci pour vos réponses si rapides. Je vais essayer çà.

Dernière modification par meskiangasher (Le 17/06/2005, à 19:15)

Hors ligne

#5 Le 17/06/2005, à 20:10

coffee

Re : Script shell pour le parcours récursif d'un repertoire

for i in ` find . -name *.zip`
do
          echo "extraction de $i"
          unzip $i -d `dirname "$i"`
done

Une petite simplification du code (toute petite la simplification smile)


Nom d'un tupperware habillé en streetware mangeant de la confiture de pouère et qui se dite où est-ce que je suis ouère !
Tiens mon blog
Les blagues sous forme de fausses aides sont susceptible de ban (ex: rm)

Hors ligne

#6 Le 17/06/2005, à 21:08

sksbir

Re : Script shell pour le parcours récursif d'un repertoire

heu, coffee, sans vouloir de vexer, la syntaxe de devloop est bcps plus simple non ? wink

sinon, et de mémoire, on peut aussi faire:

find . -type f -name "*.zip" -print  | xargs unzip


[edit] ha oui, c'est plus simple, mais surtout , ça va tout décompresser dans le même répertoire (celui d'où on lance la commande)

donc,

find . -type f -name "*.zip" -print  | xargs gzip -d

ça devrait aussi le faire...

Dernière modification par sksbir (Le 17/06/2005, à 21:19)

Hors ligne

#7 Le 18/06/2005, à 05:40

coffee

Re : Script shell pour le parcours récursif d'un repertoire

J'ai juste lu les man, donc oui la syntaxe de devloop est plus simple mais comme tu as mis dans ton edit, tu mets tout dans le même repertoire donc je pense que ce n'est pas le but...

gzip gere les .zip?
avec unzip ça ne marche pas non plus... mais xargs est surement une bonne idée mais pas eu le temps de matter


Nom d'un tupperware habillé en streetware mangeant de la confiture de pouère et qui se dite où est-ce que je suis ouère !
Tiens mon blog
Les blagues sous forme de fausses aides sont susceptible de ban (ex: rm)

Hors ligne