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

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

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

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

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

zipfiles.txt 如下:

./CSAN/S1A.zip 
./MEZO/S1B.zip

输出是

./CSAN/S1A.SAFE 
./MEZO/S1B.SAFE

我尝试添加一个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

有什么好的解决办法?

答案1

使用-n开关。来自 unzip 手册页:

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

答案2

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

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

相关内容