web-dev-qa-db-fra.com

Décompresser tous les fichiers dans un répertoire

J'ai un répertoire de fichiers Zip (créé sur une machine Windows). Je peux les décompresser manuellement à l'aide de unzip filename, mais comment puis-je décompresser tous les fichiers Zip du dossier actuel via le shell?

Utiliser Ubuntu Linux Server.

148

Cela fonctionne à bash, selon ce lien :

décompressez\*. Zip

300
ChristopheD

Il suffit de mettre des citations pour échapper au caractère générique:

unzip "*.Zip"
72
ghostdog74

Extrait tous les fichiers Zip du répertoire en cours dans de nouveaux répertoires portant le nom du fichier .zip.

ex, les fichiers suivants:

myfile1.Zip
myfile2.Zip 

sera extrait à:

./myfile1/files...
./myfile2/files...

Script shell:

#!/bin/sh
for Zip in *.Zip
do
  dirname=`echo $Zip | sed 's/\.Zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$Zip"
      cd ..
      # rm -f $Zip # Uncomment to delete the original Zip file
    else
      echo "Could not unpack $Zip - cd failed"
    fi
  else
    echo "Could not unpack $Zip - mkdir failed"
  fi
done
47
Pedro Lobito

décompressez * .Zip, ou s’ils sont dans des sous-dossiers, quelque chose comme 

find . -name "*.Zip" -exec unzip {} \;
31
phatmanace
for i in *.Zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

Cela décompressera toutes les archives Zip dans de nouveaux dossiers nommés avec les noms de fichiers des archives Zip.

a.Zipb.Zipc.Zip sera décompressé dans les dossiers abc respectivement.

11
Jahid

Décompressez tous les fichiers .Zip et stockez le contenu dans un nouveau dossier portant le même nom et dans le même dossier que le fichier .Zip:

find -name '*.Zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Ceci est une extension de la réponse de @ phatmanace et des adresses le commentaire de @ RishabhAgrahari:

Ceci extraira tous les fichiers Zip du répertoire courant. Que faire si je veux que les fichiers Zip (présents dans les sous-dossiers) soient extraits dans les sous-dossiers respectifs?

7
jojo

aunpack -e *.Zip, avec atool installé .a l'avantage de traiter intelligemment les erreurs et de toujours décompresser dans des sous-répertoires, à moins que le fichier Zip ne contienne qu'un seul fichier. Ainsi, il n’ya aucun risque de polluer le répertoire en cours avec une masse de fichiers, comme avec unzip sur un Zip sans structure de répertoires.

6
kampu

Utilisez ceci:

for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
2
Ankit Malhotra

Dans n’importe quel shell POSIX, cela va décompresser dans un répertoire différent pour chaque fichier Zip:

for file in *.Zip
do
    directory="${file%.Zip}"
    unzip "$file" -d "$directory"
done
2
Jeff Fisher

for file in 'ls *.Zip'; do unzip "${file}" -d "${file:0:-4}"; done

2
anurag Dalia

Ceci est une variante de Pedro Lobitoanswer using Comment parcourir en boucle un répertoire pour supprimer des fichiers portant certaines extensions enseignements

shopt -s globstar
root_directory="."

for Zip_file_name in **/*.{Zip,sublime\-package}; do
    directory_name=`echo $Zip_file_name | sed 's/\.\(Zip\|sublime\-package\)$//'`
    printf "Unpacking Zip file \`$root_directory/$Zip_file_name\`...\n"

    if [ -f "$root_directory/$Zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$Zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$Zip_file_name"
        # rm -f "$root_directory/$Zip_file_name"
    fi
done
0
user

Si les fichiers sont gzip'd. Ensuite, utilisez simplement:

gunzip -rfk .

depuis le répertoire racine pour extraire récursivement les fichiers des répertoires respectifs en conservant les fichiers d'origine (ou supprimez -k pour les supprimer)

0
Devaroop