![将文本列表中的多个 zip 文件提取到各自的文件夹中,并附带错误日志](https://linux22.com/image/891943/%E5%B0%86%E6%96%87%E6%9C%AC%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%20zip%20%E6%96%87%E4%BB%B6%E6%8F%90%E5%8F%96%E5%88%B0%E5%90%84%E8%87%AA%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%EF%BC%8C%E5%B9%B6%E9%99%84%E5%B8%A6%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97.png)
我希望从文本列表中解压缩 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 文件本身位于同一目录中的日志文件。