【问题标题】:The watch command does not work with a command using a pipe [closed]watch 命令不适用于使用管道的命令[关闭]
【发布时间】:2020-01-21 18:16:52
【问题描述】:

非常简单/快速的问题,为什么这个命令不起作用?

watch ls *.log | wc -l

watch -d ls *.log | wc -l

我正在尝试观看当前目录中文件总数的更新。

【问题讨论】:

  • 那个命令没有意义。手表会定期刷新屏幕,永远。在命令有效的情况下,执行将永远不会完成。预期的wc -l 输出将是infinite
  • @Poshi,这适用于watch -d ls *.log,并突出显示连续更新之间的差异。但是为什么不能通过管道将它传递给wc 命令呢?
  • 为什么说不行呢?错误信息是什么?
  • @kvantour 我想计算连续更新之间特定目录中的文件数。这个解决方案watch "ls | wc -l" 工作并由“Bayou”提供。

标签: bash watch ls wc


【解决方案1】:

如果您想通过管道传输命令并观察它,请在其周围添加引号:

watch "ls | wc -l"

【讨论】:

    【解决方案2】:

    即使这里的问题显然是引用,你也不应该解析命令ls。计算目录中文件数的规范方法是:

    find /path/to/dir -maxdepth 1 -type f -printf "c" | wc -c
    

    这避免了可能包含换行符的有趣名称的问题。

    OP 的解决方案将显示为:

    watch 'find . -maxdepth 1 -type f -printf "c" | wc -c'
    

    【讨论】:

    • 感谢并同意您对文件名中特殊字符的看法。但是,maxdepth=1 应该是 maxdepth 1
    猜你喜欢
    • 2023-03-22
    • 2014-07-06
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2021-06-17
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多