解压缩多个文件而不覆盖同名文件

解压缩多个文件而不覆盖同名文件

在我的脚本的早期阶段,它需要解压缩用户提供的“x”个文件量。在压缩文件集中,存在名称重复(但它们的内容彼此不同);即 zip1.zip 和 zip2.zip 都包含同名文件“d09483272”。

人们可以通过这样做来解压缩多个文件unzip \*zip -d $M_DIR,但这对于我的情况来说效率很低,因为新解压缩的文件会覆盖 $M_DIR 位置中已有的文件。

考虑用时间戳解压缩它们 - 一些奇怪的嵌套循环,如下所示(这显然不起作用)

    for zip in *zip; do
            unzip -l *zip | while read file
            do
                    unzip -p *.zip ${file} > $(date "+%H:%M:%S:%s%N").pdf
            done
    done

如果这不是一个合适的方法,可能有更简单的方法吗?想法?

答案1

看一下unzip-manpage:

 -n     never overwrite existing files.  If a file already exists, skip the extraction
        of that file without prompting.

答案2

由于时间有限,我匆忙进行了一个不优雅的快速修复。

    for zip in $T_DIR*zip; do
            unzip $zip -d $M_DIR;
            rename "s/.pdf/$(date "+%s%N").pdf/" ${M_DIR}*;
    done

每个文件都单独解压缩到$T_DIR文件夹中,然后在其名称中添加纳秒时间戳。当下一波解压文件进入该$T_DIR文件夹时,将不再有任何“名称重复”。关于更快/改进的解决方案的想法?

这只适用于“名称重复”文件存在于单独的 zip 文件中的警告。

相关内容