【发布时间】:2019-02-15 12:52:26
【问题描述】:
我知道如何清空文件内容而不删除它:
echo "" > catalina.out
但我想在单个命令(或命令管道)中对多个文件执行此操作。最优雅的方法是什么?
到目前为止我所做的尝试
通常我会尝试涉及find 和xargs 的东西,但如果重定向是您的 xargs 命令的一部分,我不确定绑定优先级是否会按照我的意图进行解释。我试过了,它没有用:
find $TOMCAT_HOME/logs/ -type f | xargs --delimiter "\n" -n 1 -I% echo "" > %I;
如果可能的话,我更喜欢使用 find + xargs 而不是 find -exec 或 tee + 进程替换。 (对于那些关心的人,我的信念是-exec 绕过了管道的可扩展性。在这个例子中可能没有那么多,但我能弄清楚如何使用管道的角落案例越多,我对管道的理解就越深入be - 我认为 Doug McIlroy 的思想没有得到充分利用。此外,字符串中的命令会破坏编辑器的语法高亮功能)
回答(下面是redneb的学分)
我觉得find -print0 | xargs -0 成语很麻烦,我更喜欢使用xargs --delimiter。所以这是我已经确定的方式,这是对已接受答案的一种变体:
find $TOMCAT_HOME/logs/ -type f | xargs --delimiter "\n" truncate --size=0
我还使用截断的长选项--size,因为自记录代码更易于阅读。
【问题讨论】: