我想要压缩的目录中有一堆文件:
console.log(getAverageTime(times));
如果我使用新文件填充目录并再次运行脚本,它将重新压缩所有不包含字符串" zip"的文件。如何跳过那些解压缩但在同一目录中已有zip文件的文件?
例如,脚本不应再次压缩for i in $dir/*; do
if [[ ! "$i" =~ "zip" ]]; then
zip $i
else
echo "$i has already been zipped"
fi
done
,因为它在同一目录中已经有一个zip版本:
testing.log
更新 - 03/15/2018
感谢您的所有反馈!该脚本现在看起来像:
testing.log testing.log.zip
答案 0 :(得分:2)
for i in $dir/*; do
if [ -f "${i}.zip" -o "${i}" = "${i%.zip}" ]; then
echo "${i} has already been zipped"
continue
fi
zip $i
done
[ -f "${i}.zip" ]
检查相应zip文件是否存在,[ "${i}" = "${i%.zip}" ]
检查文件本身是否为zip文件。
答案 1 :(得分:2)
您甚至可以使用字符类来帮助初始文件选择,方法是在其扩展名中排除zip
的文件。例如
for i in "$dir"/*.[^z]*; do ## exclude all files w/ext beginning with 'z'
zip "$i"
done
从另一个角度看问题就是另一种方法。
答案 2 :(得分:1)
您最好管理历史记录文件。例如,如果您正在压缩mylog.log文件,请将该文件放在历史文件中,如下所示
echo "$i" >> history.txt
zip $i
下次启动相同的脚本时,应检查该文件是否已在该history.txt
文件中可用。如果在历史文件中可用,请不要压缩它。所以你的最终剧本将如下所示: -
if grep "$i" history.txt ; then
echo "$i already zipped
else
echo "$i" >> history.txt
zip $i
fi
一开始手动创建一个历史文件,否则if
条件会给你一个错误信息。
希望这会有所帮助
答案 3 :(得分:1)
我会选择像
这样的东西for i in $dir/*; do
if [ -z ${i##*.zip} ]; then
# $i ends with ".zip"
echo "already a zip file: $i"
elif [ -f ${i}.zip ] ; then
# there already exists a zipped file named $i.zip
echo "already has zipped sibling: $i"
else
# actually zip $i into $i.zip
zip $i.zip $i
fi
done