不要压缩已经压缩的文件

时间:2018-03-15 07:52:42

标签: bash shell

我想要压缩的目录中有一堆文件:

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

4 个答案:

答案 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