你在这里问一些事情......
为什么我的日志文件在记事本中看起来很有趣?
可能是因为您用来查看它的工具,但如果没有更多信息,很难说。记事本是一个 Windows 应用程序,Windows 使用一种不同于 unix 的策略来结束文本文件中的行。如果您想确定,请使用hexdump
或之类的工具od
来查看文件中的实际情况。正如评论中所建议的那样,head filename.log
在 unix 主机上可能会向您展示您的期望,在这种情况下,您将确认行尾理论。
如果记事本是您的首选工具,那么我们可以向您展示如何转换文件以使其与 Windows 更兼容。否则,让我们知道您真正需要什么。
如何在我的日志中包含这些额外数据?
你要几个项目:
- 文件名 - 很简单,你已经知道了。
- 删除日期 - 很简单,您只需要每个条目的时间戳。
- 文件的年龄 - 更难。文件的时间戳是否足够,或者您是否想要例如从文件本身的第一行提取的日期?如果是后者,您需要在问题中包含一个示例。我现在会选择前者。
首先,bash 版本 4 及更高版本允许您将时间格式用作 a 的一部分printf
,因此您可以执行以下操作:
printf -v log '%s/Deleted/%(%F)T' "$HOME"
但老实说,我认为这是一个 hack,而您真正想要的是使用其他工具旋转的单个文本文件。
log=/var/log/whatever.log
“其他工具”将取决于您的操作系统。在 FreeBSD 中,查看/etc/newsyslog.conf
. 在 Linux 中,请参阅您的发行版的文档,查找诸如“logrotate”之类的内容。
您的命令的输出find
可以是成功删除的文件,但您不必只有文件名。考虑以下:
find "$HOME/OldLogFiles/" -type f -mtime +7 -ls -delete
在文件被删除之前,它的输出是整ls
行。它包括文件的日期和 inode 编号。以时间戳开头,您可能会很高兴:
find "$HOME/OldLogFiles/" -type f -mtime +7 -ls -delete | sed "s/^/[$(printf '%(%F %T)T')] /"
或者,如果您更愿意在不使用 sed 的情况下执行此操作:
while read line; do
printf '[%(%F %T)T] %s\n' -1 "$line"
done < <(find "$HOME/OldLogFiles/" -type f -mtime +7 -ls -delete)
在这个版本中,-1
printf 将 解释%T
为“现在”。
重定向到$log
你喜欢的。
最后,这可能是“最佳”选项,避免完全在 bash 中管理日志文件,logger
而是使用系统的命令。POSIX 版本非常简单,但您可以在BSD 、 Linux等中控制 syslog 样式。