我想观察单个文件不断增长的大小,所以我使用了这个命令:
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}'
但此命令不返回任何结果
我想观察单个文件不断增长的大小,所以我使用了这个命令:
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}'
但此命令不返回任何结果
您正在将输出传递watch
到 into awk
。如果你简化你的命令行,你所拥有的是:
watch <some arguments> | awk '{print $5}'
那不是你想要的。尝试:
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
watch -n 5 "du -h club_prod.sql"
不完全相关,但如果你想监控某个文件的增长率,你可以使用以下命令:
tail -f yourfile.txt | pv > /dev/null
tail -f
- 输出附加到文件的数据pv
- 测量通过管道的数据流> /dev/null
- 标准输出被丢弃注意:有时pv
可能没有预装
我希望这会对某人有所帮助:)
您需要引用管道,以便在 watch
.
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
还要注意\
添加到,\$5
因为外部引号现在是双引号,其中 -$
变量被扩展。(其他引用方法通常比这更难看。)
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
对于文件的快速详细增长观察,每 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 的结果。
的用法watch
是正确的,但ls
我会避免使用。我会推荐使用stat
or 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
。
#!/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
你可以这样执行:
while true; do
du -s **file_or_directory**
sleep **time_interval**
done