我最近遇到了这一页指示如何清空文件。如何对给定子文件夹中的所有文件执行此操作?
例如,通过使用> 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
如果没有文件或目录,那么您必须注意当前的nullglob
shell 选项。默认情况下,它是关闭的:
$ shopt nullglob
nullglob off
...这将保留*
未展开的内容,从而truncate
创建一个名为*
.您可以通过两种方式避免这种情况:
shopt -s nullglob
在运行之前设置 nullglob:truncate
。然后你会(如果你没有删除 stderr)看到一个错误:截断:缺少文件操作数
告诉
truncate
不要创建丢失的文件:truncate --no-create -s 0 /var/log/*