【发布时间】:2022-01-23 16:20:28
【问题描述】:
我想每天在特定时间清空(而不是删除)日志文件。像
echo "" > /home/user/dir/log/*.log
但它会返回
-bash: /home/user/dir/log/*.log: ambiguous redirect
有什么办法可以做到吗?
【问题讨论】:
我想每天在特定时间清空(而不是删除)日志文件。像
echo "" > /home/user/dir/log/*.log
但它会返回
-bash: /home/user/dir/log/*.log: ambiguous redirect
有什么办法可以做到吗?
【问题讨论】:
您不能重定向到多个文件,但您可以tee 重定向到多个文件。
tee /home/user/dir/log/*.log </dev/null
来自/dev/null 的重定向也避免了在每个文件的开头写入一个空行,这是您尝试中的另一个错误。 (如果通配符与任何现有文件都不匹配,也许可以指定 nullglob 以避免创建名称为 *.log 的文件。)
但是,更好的解决方案可能是使用实用程序logrotate,它在每个 Debian(以及 Ubuntu、Mint 等)安装中开箱即用。它默认每晚运行,并且可以通过在其配置目录中放置一个文件来进行配置。它可以让您压缩以前版本的日志文件而不是仅仅覆盖,并注意保留所有权和权限等。
【讨论】:
你可以试试这个。
使用 For 循环删除并重新创建这些文件。
创建 .sh 文件 ( something.sh ) 并在其中添加以下代码。
#!/bin/bash
for f in /home/user/dir/log/*.log
do
[ -f "$f" ] && rm "$f"
touch "$f"
done
#change permision
chown -R root:root /home/user/dir/log/
每晚在 cron 中运行
* 22 * * * /file path/something.sh
【讨论】:
.sh 扩展名通常不应用于 Bash 脚本。事实上,大多数脚本文件根本不应该有扩展名。