我有一个进程,将大量数据写入stdout,并将其重定向到日志(log)文件.我希望通过偶尔将当前文件复制到新名称并截断来限制文件的大小.

我常用的截短文件的技巧,比如

cp /dev/null file

不工作,可能是因为流程正在使用它.

有什么方法可以截断文件吗?或者删除它,并以某种方式将进程的stdout与新文件关联?

FWIW,这是一个第三方产品,我不能修改它来改变它的日志(log)模型.

EDIT在文件上重定向似乎与上面的副本有相同的问题-文件下次写入时会恢复到以前的大小:

ls -l sample.log ; echo > sample.log ; ls -l sample.log ; sleep 10 ; ls -l sample.log
-rw-rw-r-- 1 user group 1291999 Jun 11  2009 sample.log
-rw-rw-r-- 1 user group 1 Jun 11  2009 sample.log
-rw-rw-r-- 1 user group 1292311 Jun 11  2009 sample.log

推荐答案

看看实用程序split(1),它是GNU Coreutils的一部分.

Linux相关问答推荐

Linux/gcc中的文件创建时间系统调用

如何删除字符串中的`{{i:`and `}}`

Linux在所有多行中用新值替换整个列

Docker 不保留 chown 用户设置

jinja2.exceptions.TemplateSyntaxError:预期标记,,得到整数(支持十六进制,八进制和二进制整数文字)

如何使用 gdb 调试堆栈分段错误?

如何为命令的所有选项启用无密码 sudo?

如何在vim中使用正则表达式来切换文件中所有字符的大小写

std::system 使用什么Shell?

yum 可以告诉我哪些存储库提供了特定的包吗?

如何 grep 精确的文字字符串(无正则表达式)

如何从任意 pthread_t 获取线程 ID?

bash shell 脚本函数定义(如f () {})中使用的括号是什么?它与使用function关键字不同吗?

在 Linux 上的进程之间传递消息的最快技术?

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

如何在 linux 或 unix 上找到用户的主目录?

bash / Makefile中双美元符号的含义是什么?

带有日期和时间的 Linux 命令历史记录

如何停止 Linux 上的不间断进程?

Linux 目录列表中只有问号