【问题标题】:watch file size on linux在 linux 上查看文件大小
【发布时间】:2012-05-20 06:27:24
【问题描述】:

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

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

但是这个命令没有返回任何结果

【问题讨论】:

  • 也许这个问题是SuperUser的候选。
  • 呃,像这样使用ls 是个坏主意。
  • Using watch 与在脚本中解析不在同一个类中......尽管我承认在我的情况下我不会在使用 watch 时过滤 ls -l 的输出它。

标签: linux shell command-line watch


【解决方案1】:

您将watch 的输出通过管道传输到awk。如果你简化你的命令行,你所拥有的是:

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

这不是你想要的。试试:

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

【讨论】:

  • watch -n 5 "ls -lh acro | awk '{print \$5}' >> acro_size.txt" 对我有用,当我像上面那样做时,它只显示一次大小? (acro 只是我的测试文件)
  • 嗯,对我有用。如果我更改文件的大小,则显示每 5 秒更新一次。您在上面评论中的示例似乎将输出从 awk 重定向到文件...这意味着您几乎无法从使用 watch 中受益,这意味着作为显示工具。
  • 啊哈,现在我明白了,它也对我有用(可能),只是我希望得到我的列表,而不是整个屏幕的更新。如果您想像我一样对文件执行此操作,则可能有更好的命令来重复而不显示。我的错。
  • while :; do ls -lh club_prod.sql &gt;&gt; acro_size.txt; sleep 60; done
  • 为什么要使用 ls/awk 和管道,当它有一个命令 du 时?
【解决方案2】:
watch -n 5 "du -h club_prod.sql"

【讨论】:

  • 这适用于带有 -s 标志的 psql 转储子目录的目录:watch -n 5 "du -sh directory_with_subdirectories/"
【解决方案3】:

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

tail -f yourfile.txt | pv &gt; /dev/null

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

注意:有时pv 可能未预装

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

【讨论】:

    【解决方案4】:

    您需要引用管道以便它在 watch 完成。

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

    还要注意添加到\$5\,因为外部引号现在是双引号,其中$ 变量被扩展。 (其他的引用方式一般都比这个更丑。)

    【讨论】:

      【解决方案5】:
      watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
      

      【讨论】:

      • 请注意,这个例子中的$5会被shell吃掉。
      • 在我使用 Ubuntu 服务器的情况下,我必须打印 \$6 不确定这是否是因为 linux 现在在 ls -lh 上有更多输出?但是如果有人遇到这个尝试 6 ;)
      【解决方案6】:

      对于文件的快速详细增长观察,每 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 的结果。

      【讨论】:

        【解决方案7】:

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

        • 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的结果。

        【讨论】:

          【解决方案8】:
          #!/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
          

          【讨论】:

            【解决方案9】:

            你可以这样做:

            while true; do
              du -s **file_or_directory**
             sleep **time_interval**
            done
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-02-06
              • 2012-06-21
              相关资源
              最近更新 更多