pet*_*rph 351
> logfile
Run Code Online (Sandbox Code Playgroud)
或者
cat /dev/null > logfile
Run Code Online (Sandbox Code Playgroud)
或者
true | tee logfile
Run Code Online (Sandbox Code Playgroud)
(随意替换false或任何其他不产生输出的命令,例如:in bash)如果你想更有说服力,将全部为空logfile(实际上他们会将其截断为零大小)。
如果您想知道“需要”多长时间,您可以使用
dd if=/dev/null of=logfile
Run Code Online (Sandbox Code Playgroud)
(dd if=/dev/null > logfile顺便说一下,这与 相同)
你也可以使用
truncate --size 0 logfile
Run Code Online (Sandbox Code Playgroud)
(或truncate -s 0 logfile) 完全明确,或者,如果您不想,
rm logfile
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,您依赖于应用程序通常会重新创建日志文件(如果它不存在)的常见行为)。
但是,由于日志文件通常很有用,因此您可能需要压缩并保存副本。虽然您可以使用自己的脚本来做到这一点,但至少尝试使用现有的工作解决方案是一个好主意,在这种情况下logrotate,它可以做到这一点并且可以合理配置。
如果您需要为多个文件执行此操作,安全的方法是
truncate -s 0 file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
或者
> file1 > file2 ...
Run Code Online (Sandbox Code Playgroud)
一些 shell ( zsh) 还允许指定多个重定向目标。
这有效(至少在bash),因为它创建了所有所需的重定向,尽管只有最后一个会捕获任何输入(或在这种情况下没有)。tee包含多个文件的示例在任何情况下都应该有效(假设您tee知道如何处理多个输出文件)
当然,好的旧 shell 循环也可以工作:
> logfile
Run Code Online (Sandbox Code Playgroud)
尽管由于命令为每个文件单独运行,它会慢得多。使用find以下方法可能会有所帮助:
find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+
Run Code Online (Sandbox Code Playgroud)
或者
find <criteria matching required files> -delete
Run Code Online (Sandbox Code Playgroud)