unzip file.zip -d xxx
extraira les fichiers dans le répertoire xxx, et xxx sera créé s'il n'y est pas. Vous pouvez consulter la page de manuel pour plus de détails.
La ligne awk ci-dessous devrait faire l'affaire :
ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh
Voir le test ci-dessous,
remarque que j'ai supprimé |sh
à la fin, puisque mes zips sont de fausses archives; Je veux juste montrer la ligne de commande générée ici.
kent$ ls -l
total 0
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.zip
kent$ ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'
unzip 001.zip -d 001
unzip 002.zip -d 002
unzip 003.zip -d 003
unzip 004.zip -d 004
unzip 005.zip -d 005
unzip 006.zip -d 006
unzip 007.zip -d 007
"extraire ici" est simplement une caractéristique de n'importe quel unzip
enveloppe que vous utilisez. unzip
n'extrairea que ce qui se trouve réellement dans l'archive. Il n'y a probablement pas de moyen plus simple qu'un script shell. Mais sed
, awk
etc. ne sont pas nécessaires pour cela si vous avez un shell compatible POSIX :
for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done
(Vous NE DEVEZ PAS échapper le *
ou l'expansion du nom de chemin n'aura pas lieu.) Sachez que si l'archive ZIP contient un répertoire, comme avec les archives Eclipse (qui contiennent toujours eclipse/
), vous vous retrouveriez avec ./eclipse*/eclipse/eclipse.ini
dans tous les cas. Ajouter echo
avant unzip
pour un essai.
p7zip
, la version en ligne de commande de 7zip fait le travail
7z x '*.zip' -o'*'
Sur debian et ubuntu, vous devez installer p7zip-full
.