while 在 bash 中循环直到文件大小不变

use*_*713 -1 bash bash-scripting

我正在尝试使用 bash 脚本在循环中执行以下操作

file_size = 0
temp_size = 1
output_file
while (file_size != temp_size)
     temp_size = file_size
     download file
     append to output_file if possible
     file_size = sizeof(output_file)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Cha*_*ers 6

目前尚不清楚您究竟在寻找什么,但我已经拍摄了希望这会对您有所帮助。

下面的程序需要放在一个文本文件中。让我们说你的名字dl。你需要改变它的权限

chmod u+x dl
Run Code Online (Sandbox Code Playgroud)

您可以通过传入您要查找的输出文件名来运行它。

./dl output
Run Code Online (Sandbox Code Playgroud)

它在我硬编码的 url 上下载图像文件,一遍又一遍地将输出附加到输出文件,直到输出文件的大小等于或大于您在temp_size变量中指定的大小。

#!/usr/bin/env bash

STAT="stat -c%s"
if [ $(uname) == "Darwin" ]; then
  STAT="stat -f%z"
fi

if [[ $# -ne 1 ]]; then
  echo "Usage: $0 output_filename"
  exit 1
fi

output_file="$1"
file_size=$($STAT "$output_file")
temp_size=1000000
download_file="http://www.google.com/logos/doodles/2013/franz_kafkas_130th_birthday-1976005-hp.png"
while [[ $file_size -le $temp_size ]]; do
  wget -O - $download_file >> "$output_file"
  file_size=$($STAT "$output_file")
done
echo $output_file is now $file_size bytes.
Run Code Online (Sandbox Code Playgroud)

如果使用相同的参数再次运行它,它将什么也不做,因为输出文件已经大于 temp_size。您可以通过给它另一个文件名或删除输出文件来重置它。

rm output
Run Code Online (Sandbox Code Playgroud)

  • 你为什么回滚`env`?相信我,在这个网站上你会因为使用它而获得赞誉,它使你的脚本可以移植到任何 *nix 之类的系统。进入是一个好习惯。 (2认同)