在linux上查看文件大小

时间:2012-05-11 16:16:58

标签: linux shell command-line watch

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

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}'

但此命令不会返回任何结果

9 个答案:

答案 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 drive
  • stat: 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