我有一个ZIP文件目录(在Windows机器上创建)。我可以使用unzip filename
手动解压缩它们,但是如何通过shell解压缩当前文件夹中的所有ZIP文件?
使用Ubuntu Linux服务器。
根据this link的说法,这适用于bash:
解压缩\ * .zip
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
这是使用Pedro Lobito教义的answer How to loop through a directory recursively to delete files with certain extensions的变种:
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
如果文件是gzip'd
。然后使用:
gunzip -rfk .
从根目录通过保留原始目录递归提取相应目录中的文件(或删除-k
删除它们)
要解压缩目录中的所有文件,只需在终端中键入以下命令:
unzip '*.zip'
for i in `ls *.zip`; do unzip $i; done
使用
sudo apt-get install unzip
unzip file.zip -d path_to_destination_folder
在linux中解压缩文件夹
只需输入一些引号来逃避通配符:
unzip "*.zip"
使用zip文件的文件名将当前目录中的所有zip文件提取到新的dirs中。
例如,以下文件:
myfile1.zip
myfile2.zip
将被提取到:
./myfile1/files...
./myfile2/files...
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
unzip * .zip,或者如果它们在子文件夹中,那么就像
find . -name "*.zip" -exec unzip {} \;
for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d "$newdir"
done
这会将所有zip存档解压缩到以zip存档的文件名命名的新文件夹中。
a.zip
b.zip
c.zip
将分别解压缩到a
b
c
文件夹中。
解压缩所有.zip
文件并将内容存储在与.zip
文件相同名称和文件夹的新文件夹中:
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
这是@phatmanace's answer的扩展,并解决@RishabhAgrahari's comment:
这将提取当前目录中的所有zip文件,如果我想在相应的子文件夹中提取zip文件(存在于子文件夹中),该怎么办?
aunpack -e *.zip
,安装了atool
。它具有智能处理错误的优点,并且总是解压缩到子目录中,除非zip只包含一个文件。因此,没有使用大量文件污染当前目录的危险,因为在没有目录结构的zip上有unzip
。
在任何POSIX shell中,这将解压缩到每个zip文件的不同目录:
for file in *.zip
do
directory="${file%.zip}"
unzip "$file" -d "$directory"
done
用这个:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done