我想了解特定文件的增长速度。
我可以
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
意味着从文件的最后一个字节开始,这避免了必须首先读取最后十行(这在二进制文件上可能需要一段时间)。