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.
Cela fonctionne à bash, selon ce lien :
décompressez\*. Zip
Il suffit de mettre des citations pour échapper au caractère générique:
unzip "*.Zip"
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
décompressez * .Zip, ou s’ils sont dans des sous-dossiers, quelque chose comme
find . -name "*.Zip" -exec unzip {} \;
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.Zip
b.Zip
c.Zip
sera décompressé dans les dossiers a
b
c
respectivement.
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?
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.
Utilisez ceci:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
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
for file in 'ls *.Zip'; do unzip "${file}" -d "${file:0:-4}"; done
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
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)