将文本列表中的多个 zip 文件提取到各自的文件夹中,并附带错误日志

将文本列表中的多个 zip 文件提取到各自的文件夹中,并附带错误日志

我希望从文本列表中解压缩 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 文件本身位于同一目录中的日志文件。

相关内容