我有一个 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