如何跳过解压缩已经存在的文件?

Krs*_*ztr 2 bash

我有一个 for 循环,它将所有内容解压缩.zip到该目录中。我想检查解压后的文件是否已经存在并且只对压缩后的文件进行解压。

这是没有任何 if 语句的代码:

for i in `cat zipfiles.txt`; do
    output_dir=$(dirname $i)
    unzip -d $output_dir $i
done  
Run Code Online (Sandbox Code Playgroud)

zipfiles.txt 是这样的:

./CSAN/S1A.zip 
./MEZO/S1B.zip
Run Code Online (Sandbox Code Playgroud)

输出是

./CSAN/S1A.SAFE 
./MEZO/S1B.SAFE
Run Code Online (Sandbox Code Playgroud)

我试图添加一个if循环,但它仍然询问我是否要替换已经存在的文件。

for i in `cat zipfiles.txt`; do
    file="${dir%/}.SAFE"
    if [ -e "$file" ]
    then
        echo "It exists"
    else
        output_dir=$(dirname $i)
        unzip -d $output_dir $i
    fi
done
Run Code Online (Sandbox Code Playgroud)

什么是好的解决方案?

Eld*_*eek 16

使用-n开关。从解压缩手册页:

-n 从不覆盖现有文件。如果文件已存在,则跳过提取该文件而不提示。默认情况下,在提取任何已存在的文件之前解压缩查询;用户可以选择仅覆盖当前文件、覆盖所有文件、跳过当前文件的提取、跳过所有现有文件的提取或重命名当前文件。


Krs*_*ztr 0

好的,我找到了正确的解决方案:

for i in `cat zipfiles.txt`; do
    output_dir=$(dirname $i)
    echo $output_dir
    file="${i/zip/SAFE}"
    echo $file
    if [ -e "$file" ]
    then
        echo "It exists"
    else
        unzip -d $output_dir $i
    fi
done
Run Code Online (Sandbox Code Playgroud)