清空目录中的所有日志文件

清空目录中的所有日志文件

我最近遇到了这一页指示如何清空文件。如何对给定子文件夹中的所有文件执行此操作?

例如,通过使用> file.log来清空文件 ?

我基本上想创建一个虚拟机实例映像,并且我想清除现有日志文件,以便在使用模板时它会重新启动而不会残留数据

答案1

for i in /var/log/*; do
    > "$i"
done

如果您想避免目录的错误消息,请包含测试。

for i in /var/log/*; do
    test -f "$i" && > "$i"
done

答案2

在单个命令中的另一个选项是truncate:

truncate -s /var/log/*

不过,上面的代码会对 /var/log 的任何子目录发出错误:

截断:无法打开“/var/log/subdir”进行写入:是一个目录

...您可以通过删除 stderr 来使其静音:

truncate -s /var/log/* 2>/dev/null

如果没有文件或目录,那么您必须注意当前的nullglobshell 选项。默认情况下,它是关闭的:

$ shopt nullglob
nullglob        off

...这将保留*未展开的内容,从而truncate创建一个名为*.您可以通过两种方式避免这种情况:

  1. shopt -s nullglob在运行之前设置 nullglob: truncate。然后你会(如果你没有删除 stderr)看到一个错误:

    截断:缺少文件操作数

  2. 告诉truncate不要创建丢失的文件:truncate --no-create -s 0 /var/log/*

相关内容