当我尝试时
unzip filename.zip
有用。但是,我需要解压缩一系列 zip 文件。
为什么是:
find . -name "*.zip" -print0 | xargs -0 unzip
或者
ls *.zip | xargs unzip
不工作?
在这两种情况下,我都会收到“警告:文件名不匹配:”消息。
答案1
答案2
您的命令不起作用,因为它们将所有文件填充到同一命令行中。虽然这适用于大多数程序,但unzip
会将第一个参数作为 zip 文件,并将第一个参数之后的任何参数作为从中提取的文件。您需要为每个文件执行一次命令:
find . -name "*.zip" -print0 | xargs -0 -n1 unzip
或者
find . -name '*.zip' -exec unzip {} \;
答案3
在 bash 中你还可以执行以下操作:
for i in *.zip; do
unzip "$i"
done
还unzip
可以使用-d
开关,以便您可以将输出定位到不同的位置。
例如:
uzdir=/path/to/unzips
for i in *.zip; do
[ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
unzip "$i" -d "$uzdir/$i"
done
答案4
有一个比上面给出的循环更简单的解决方案,使用目录标志-d
:
unzip -o somefiles.zip -d $directoryPath