44

我想观察单个文件不断增长的大小,所以我使用了这个命令:

texai@maelstrom ~$ ls -lh club_prod.sql | awk '{print $5}'
116M

现在我想每 5 秒看一次结果,所以:

texai@maelstrom ~$ watch -n 5 ls -lh club_prod.sql | awk '{print $5}'

但此命令不返回任何结果

4

9 回答 9

71

您正在将输出传递watch到 into awk。如果你简化你的命令行,你所拥有的是:

 watch <some arguments> | awk '{print $5}'

那不是你想要的。尝试:

watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
于 2012-05-11T16:20:43.377 回答
44
watch -n 5 "du -h club_prod.sql"
于 2012-05-11T16:22:54.083 回答
21

不完全相关,但如果你想监控某个文件的增长率,你可以使用以下命令:

tail -f yourfile.txt | pv > /dev/null

  • tail -f- 输出附加到文件的数据
  • pv- 测量通过管道的数据流
  • > /dev/null- 标准输出被丢弃

注意:有时pv可能没有预装

我希望这会对某人有所帮助:)

于 2017-05-03T11:09:16.787 回答
7

您需要引用管道,以便 watch.

watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"

还要注意\添加到,\$5因为外部引号现在是双引号,其中 -$变量被扩展。(其他引用方法通常比这更难看。)

于 2012-05-11T16:20:46.153 回答
4
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
于 2012-05-11T16:20:29.760 回答
2

对于文件的快速详细增长观察,每 0.1 秒:

watch -n 0.1 "ls -l /mnt/some/file | awk '{print \$5}' | sed -re ' :rep ; s/([0-9])([0-9]{3})($|[^0-9])/\1,\2\3/ ; t rep '"

这将产生类似 62,673,539,072 的结果。

于 2018-01-22T14:21:05.527 回答
2

的用法watch是正确的,但ls我会避免使用。我会推荐使用stator du,但这取决于你想要什么。

  • du如果你想在你的驱动器上占用空间
  • stat如果您想要文件包含的字节数(我可以从文件中读取多少字节)

想象一下使用压缩文件系统,或处理稀疏文件、内部碎片、间接块......

对于这两种情况,结果都是:

$ watch -n 5 'stat --printf "%s\n" file'
$ watch -n 5 'du -B1 file'

这两个结果实际上都可以在一个命令中获得stat

$ watch -n 5 'stat --printf "%s %b %B\n" file'

最后两列的乘积是 的结果du

于 2018-12-19T11:10:11.863 回答
1
#!/bin/bash  
# Watch File Size and Growth  
# Author: Marcelo Pacheco - marcelo@m2j.com.br  
# Syntax: watchfilesize filetomonitor
nm="$1"  
while true  
do  
  sz=$(stat -c %s "$nm")  
  sleep 1m  
  sz1=$(stat -c %s "$nm")  
  echo Growth: $(((sz1-sz)/1024))KB/min Size: $((sz1/1024/1024))MB  
  sz=$sz1  
done
于 2019-08-26T19:58:30.107 回答
0

你可以这样执行:

while true; do
  du -s **file_or_directory**
 sleep **time_interval**
done
于 2018-12-19T09:37:54.197 回答