在 shell 脚本级别限制文件大小 (stdout) 的简单方法?

mdr*_*iel 12 bash

好的,从我的角度来看,这是一个非常实用的用例。

假设我有一个简单的 shell oneliner,它将输出记录到一个文件中。这可以是任何东西,例如 tcpdump。是否有任何通用和简单的方法来确保输出文件不会超过给定的大小?

这背后的共鸣是防止错误地填充安装点上的整个可用空间。如果我忘记了脚本,或者它每小时会产生 GB 的数据,那么这个简单的调试任务可能会导致潜在的系统崩溃。

现在,我知道一些工具中内置的选项(例如 tcpdump 中 -W/-C 的组合)。我需要的是一个非常通用的故障保护。

长话短说 - 当我运行一个脚本时:

% this -is --my=very|awsome|script >> /var/tmp/output.log
Run Code Online (Sandbox Code Playgroud)

如何确保 output.log 永远不会超过 1GB。

脚本可能会崩溃、被杀死或其他什么。

我正在寻找的解决方案应该简单易行,仅使用流行发行版(如 ubuntu/debian/fedora)中可用的工具。一般来说,一些广泛可用的东西。无论语言/技术如何,复杂的多行程序都不是这里的选择。

Edu*_*nec 17

您可以head为此使用:

command | head -c 1G > /var/tmp/output.log
Run Code Online (Sandbox Code Playgroud)

它接受 K、M、G 等作为后缀(字节是默认值)。附加“B”以使用基本 10 版本。

  • 似乎 `tail -c 1G` 也有效,对于查看事件的尾部很有用。可以理解的是它在命令结束后刷新。 (3认同)
  • 在这里伸出我的脖子,但这似乎并没有达到OP的要求(是的 - 我意识到他接受了它,但阅读了问题)。他正在使用追加重定向(`>>`),并询问“如何确保 output.log 永远不会大于 1GB。”这个答案不会这样做 - 这个答案将命令输出的大小限制为1G。使用重复的 `env | 在 Macos 上进行测试 head -c 1000 >> /var/tmp/output.log` 产生:`-rw-r--r-- 1 seamus wheel 7304 Dec 25 03:33 output.log` (3认同)