I have a directory of ZIP files (created on a Windows machine). I can manually unzip them using unzip filename
, but how can I unzip all the ZIP files in the current folder via the shell?
Using Ubuntu Linux Server.
I have a directory of ZIP files (created on a Windows machine). I can manually unzip them using unzip filename
, but how can I unzip all the ZIP files in the current folder via the shell?
Using Ubuntu Linux Server.
This works in bash, according to this link:
unzip \*.zip
Just put in some quotes to escape the wildcard:
unzip "*.zip"
Extracts all zip files in the current directory into new dirs with the filename of the zip file.
ex, the following files:
myfile1.zip
myfile2.zip
will be extracted to:
./myfile1/files...
./myfile2/files...
Shell script:
#!/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
unzip *.zip, or if they are in subfolders, then something like
find . -name "*.zip" -exec unzip {} \;
for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d "$newdir"
done
This will unzip all the zip archives into new folders named with the filenames of the zip archives.
a.zip
b.zip
c.zip
will be unzipped into a
b
c
folders respectively.
Unzip all .zip
files and store the content in a new folder with the same name and in the same folder as the .zip
file:
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
This is an extension of @phatmanace's answer and addresses @RishabhAgrahari's comment:
This will extract all the zip files in current directory, what if I want the zip files (present in subfolders) to be extracted in the respective subfolders ?
aunpack -e *.zip
, with atool
installed.
Has the advantage that it deals intelligently with errors, and always unpacks into subdirectories unless the zip contains only one file . Thus, there is no danger of polluting the current directory with masses of files, as there is with unzip
on a zip with no directory structure.
In any POSIX shell, this will unzip into a different directory for each zip file:
for file in *.zip
do
directory="${file%.zip}"
unzip "$file" -d "$directory"
done
Use this:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
This is a variant of Pedro Lobito answer using How to loop through a directory recursively to delete files with certain extensions teachings:
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
If the files are gzip'd
. Then just use:
gunzip -rfk .
from the root directory to recursively extract files in respective directories by keeping the original ones (or remove -k
to delete them)
To unzip all files in a directory just type this cmd in terminal:
unzip '*.zip'
for i in `ls *.zip`; do unzip $i; done
Use
sudo apt-get install unzip
unzip file.zip -d path_to_destination_folder
to unzip a folder in linux