我希望从文本列表中解压缩 ZIP 文件,将每个文件放入其自己的文件夹中,并将错误输出到日志文件中。
该列表如下所示:
0001.zip
0002.zip
我知道我可以使用以下命令,但我只是不知道如何完成上述操作。
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
谢谢。
答案1
由于您已经有了提取命令sh -c 'unzip -d "${1%.*}" "$1"'
,您可以使用xargs
将输入文件转换为参数:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _
不需要{}
,因为xargs
默认情况下会将输入附加到参数列表。 使其-L1
使用一行输入作为参数。
然后只需将输出重定向到文件:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ &> zip.log
或者只是错误:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ 2> zip.log
答案2
如果我们假设您有一个 zip 文件的文本列表,例如:
zipfile1.zip
another_archive.zip
...
那么你可以做
cat ziplist.txt | while read zipfile; do
zipdir="$(basename "$zipfile").d"
(
mkdir "$zipdir"
cd "$zipdir"
echo "Extracting $PWD/../$zipfile"
unzip "../$zipfile" 2>&1 > "../$zipfile.log"
)
done
这将创建一个目录,将 zip 文件解压到其中,同时将所有内容写入与 zip 文件本身位于同一目录中的日志文件。