一个命令行实用程序可以直观地显示文件增长的速度?

一个命令行实用程序可以直观地显示文件增长的速度?

我想了解特定文件的增长速度。

我可以

watch ls -l file

并从变化率中推断出该信息。

有没有类似的东西可以直接输出文件随时间的增长速度?

答案1

tail -f file | pv > /dev/null

但请注意,它涉及实际读取文件,因此它可能比仅监视文件大小的东西消耗更多的资源。

答案2

progress(Coreutils 进度查看器)或最新版本pv可以查看特定进程的文件描述符。所以你可以这样做:

lsof your-file

查看哪个进程 ( $pid) 正在写入它以及哪个文件描述符 ( $fd),然后执行以下操作:

pv -d "$pid:$fd"

或者:

progress -mp "$pid"

答案3

我有一个小 perl 脚本,我将其作为函数放入 bash 环境中:

fileSizeChange <file> [seconds]

睡眠秒数默认为 1。

fileSizeChange() {
  perl -e '
  $file = shift; die "no file [$file]" unless -f $file; 
  $sleep = shift; $sleep = 1 unless $sleep =~ /^[0-9]+$/;
  $format = "%0.2f %0.2f\n";
  while(1){
    $size = ((stat($file))[7]);
    $change = $size - $lastsize;
    printf $format, $size/1024/1024, $change/1024/1024/$sleep;
    sleep $sleep;
    $lastsize = $size;
  }' "$1" "$2"
}

答案4

tail -f -c 1 file | pv > /dev/null

另一个答案的一种变体,-c 1意味着从文件的最后一个字节开始,这避免了必须首先读取最后十行(这在二进制文件上可能需要一段时间)。

相关内容