继续检查文件大小,并在每 2MB 更改后执行命令



我有视频文件"test.mp4",我正在使用wget下载。它超过 100MB+。我想继续检查文件大小,并在每 +2MB 或一些自定义限制递增后对其执行某些命令。目前我正在尝试使用嵌套的 ifs 和 while 循环:

while true;
do
    if [[ $(find /home/user/test.mp4 -type f -size +200k 2>/dev/null);
        then
        ##### executre some commands
        while true;
        do
            if [[ $(find /home/user/test.mp4 -type f -size +2000k 2>/dev/null) ]];
                then
                ##### executre some commands
                while true;
                do
                    if [[ $(find /home/user/test.mp4 -type f -size +4000k 2>/dev/null) ]];
                        then
                        ##### executre some commands
                        while true;
                        do
                            if [[ $(find /home/user/test.mp4 -type f -size +6000k 2>/dev/null) ]];
                                then
                                ##### executre some commands
                                ##### I have to write while loops like this for ever -----------
                                break;
                            fi
                        done;
                        break;
                    fi
                done;
                break;
            fi
        done;
        break;
    fi
done;

但我必须手动做。有没有办法它不断检查,我可以告诉一些限制,然后它可以执行命令?

这可能会

bash中为您解决问题。它基本上不断检查文件大小并将其与参考编号进行比较。如果文件大小大于引用,则可以执行该命令。命令执行后,您可以更新引用大小。

# delta jump size
dsize=$(( 2*1024*1024*1024 )) # delta jump size (2Mb)
# current file size
fsize=$(stat --printf="%s" /home/user/test.mp4)
# reference size, set to the next upcomming n*dsize
osize=$(( ((fsize/dsize)+1)*dsize ))
while true; do
  # get file size in bytes
  fsize=$(stat --printf="%s" /home/user/test.mp4)
  # check if file size is bigger then reference size
  if (( fsize > osize )); then
      ## execute some commands
      # increment reference size
      osize=$(( osize + dsize ))
  fi
  sleep 1
done
利用此脚本

,可以通过以下方式改进此脚本。请注意,在执行的命令运行期间,您已经下载了两倍以上的增量大小。您可能有兴趣将增量引用大小替换为

fsize=$(stat --printf="%s" /home/user/test.mp4)
osize=$(( ((fsize/dsize)+1)*dsize ))

最新更新