我想看一个单个文件不断增长的大小,所以我使用这个命令:
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}'
但此命令不会返回任何结果
答案 0 :(得分:51)
您正在将watch
的输出汇总到awk
。如果您简化命令行,那么您拥有的是:
watch <some arguments> | awk '{print $5}'
这不是你想要的。尝试:
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
答案 1 :(得分:35)
watch -n 5 "du -h club_prod.sql"
答案 2 :(得分:13)
不完全相关,但如果您想监控某些文件的增长率,可以使用以下命令:
tail -f yourfile.txt | pv > /dev/null
tail -f
- 输出附加到文件pv
- 通过管道测量数据流> /dev/null
- 标准输出被丢弃 注意:有时pv
可能未预装
我希望这会对某人有所帮助:)。
答案 3 :(得分:7)
您需要引用管道,以便在 watch
内完成。
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
另请注意,\
已添加到\$5
,因为外部引号现在是双引号,其中$
- 变量已展开。 (其他引用方法通常比这更丑陋。)
答案 4 :(得分:3)
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
答案 5 :(得分:1)
The usage of watch
is correct, but the usage of ls
I would avoid. I would recommend the usage of stat
or du
, but this depends on what you want.
du
: If you want the space occupied on your drivestat
: If you want the number of bytes your file contains (how many bytes can I read from the file)Imagine working with a compressed file system, or with processing sparse files, internal fragmentation, indirect blocks ...
For both cases, the result would be:
$ watch -n 5 'stat --printf "%s\n" file'
$ watch -n 5 'du -B1 file'
Both results can actually be obtained in a single command with stat
:
$ watch -n 5 'stat --printf "%s %b %B\n" file'
The product of the last two columns is the result of du
.
答案 6 :(得分: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
答案 7 :(得分:0)
对于文件的快速详细增长观察,每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的东西。
答案 8 :(得分:0)
您可以这样执行:
while true; do
du -s **file_or_directory**
sleep **time_interval**
done