#1 Le 04/04/2014, à 22:33
- remssssss
commande unzip sur nombreux fichiers
Bonjour,
Voila mon pb : j'ai de nombreux fichiers zip dans un repertoire, que je voudrais dezipper "d'un coup", donc en ligne de commande.
Le truc, c'est que ces archives (.zip) ont des noms differents (jusque la, ca va), mais contiennent un dossier qui lui porte le meme nom, quelque soit le .zip
exemple :
"archive1.zip" contient un document "DOC.exe",
"archiveAB.zip" contient egalement un document "DOC.exe", (different mais de meme nom) ...etc
Du coup, la commande
unzip '*.zip'
ne s'applique pas. J'ai essayé de faire qqch avec
unzip -B '*.zip'
, mais le resultat n'est pas satisfaisant.
D'ou ma question; est il possible de dezipper des fichiers .zip en precisant le nom que l'on souhaite donner aux fichiers ?
dans ce cas, ce serait donner le meme nom que l'archive... en reprenant l'exmple j'aimerai unzipper "archive1.zip" et donner au DOC.exe extrait le nom archive1.exe
idem pour les autres archives : "archiveAB.zip" --> "archiveAB.exe" ....etc
QQun saurait il faire ca?
Merci !!!
Hors ligne
#2 Le 04/04/2014, à 23:19
- Zakhar
Re : commande unzip sur nombreux fichiers
Il faut que tu fasses un "mini-script"
En une ligne :
for f in *.zip; do dir="$(echo "$f" | head -c-4)"; mkdir "$dir"; cd "$dir"; unzip "../$f"; cd ..; done
Explications :
- le 'for' va prendre en argument tous les .zip de ton répertoire et donner tour à tour la valeur d'un élément à la variable f
- la premièce commande retire l'extension .zip de la variable f
- la suivante crée le répertoire
- on va dans ce répertoire
- on dézippe
- on remonte au répertoire
C'est brut de décoffrage sans test d'erreurs.
Ca se plantera par exemple si tu as déjà une répertoire qui porte le même nom qu'un fichier .zip... mais c'était pour faire simple !
Dernière modification par Zakhar (Le 04/04/2014, à 23:20)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#3 Le 05/04/2014, à 10:19
- remssssss
Re : commande unzip sur nombreux fichiers
Merci pour ce petit script, qui fonctionne bien.
Par contre, ca ne fait pas exactement ce que je voulais. Ici, on crée des dossiers qui ont le nom de l'archive, mais le fichier dezippé garde toujours son nom "DOC.exe".
J'aurais aimé qu'il prenne lui aussi le nom de l'archive... Comment faire cela?
...edit ...
En cherchant un peu je suis parvenu a ce que je voulais! J'ai rajouté un
mv *.exe "$dir".exe
qui va bien, pour renommer les fichiers extraits
Merci encore pour ton mini script qui m'a appris pas mal de choses (je suis debutant total en linux et en programmation)
Dernière modification par remssssss (Le 05/04/2014, à 12:07)
Hors ligne