[英]How to delete files which have X days lifetime, not last modified. Is it even possible. Linux
我在Linux机器上运行某种服务器,并使用简单的bash脚本每3天删除一次文件,每7天删除一些文件。 我使用find命令来执行此操作,但是我的文件会定期保存,这意味着最后修改日期是当前日期。 因此,文件永远不会被删除。 第一次才对我有用,因为它符合条件。 我找不到使用创建日期而非修改日期删除这些文件的方法。
这是我的简单脚本:
#!/bin/sh
while true
do
java -server file.jar nogui
echo ">$(tput setaf 3)STARTING REBOOT$(tput sgr0) $(tput setaf 7)(Ctrl+C To Stop!)$(tput sgr0)"
find /folder/* -mtime +7 -exec rm -rf {} \;
find /folder/* -mtime +3 -exec rm -rf {} \;
find /logs/* -mtime +1 -exec rm -rf {} \;
echo ">Rebooting in:"
for i in 5 4 3 2 1
do
echo ">$i..."
sleep 1
done
done
如果有人可以帮助我,我将非常感激!
不,不可能。 标准Linux文件系统根本不跟踪创建时间。 ( ctime
有时被误认为是创建时间,是元数据更改时间-与mtime相比,mtime是数据修改时间)。
也就是说,肯定有丑陋的骇客。 例如,如果您用incron
(或者效率较低的cron
)调用了以下脚本来记录文件创建日期:
#!/bin/bash
mkdir -p .ctimes
for f in *; do
if [[ -f $f ]] && [[ ! -e .ctimes/$f ]]; then
touch ".ctimes/$f"
fi
done
...然后,您可以在.ctimes
目录中查找超过三天的文件,并删除标记和它们代表的文件:
#!/bin/bash
find .ctimes -mtime +3 -type f -print0 | while IFS= read -r -d '' filename; do
realname=${filename#.ctimes/}
rm -f -- "$filename" "$realname"
done
只是一个主意-不要开枪... :-)
如果文件不是由某个进程自动生成的系统文件,而是服务器日志文件,则可以在文件内部回显创建日期(即结束日期或开始日期),并稍后对该值进行grep以确定是否必须删除或保持。
如果您使用的是ext4文件系统,则会有一些希望。 您可以使用stat
和debugfs
实用程序来检索它。 ext4将创建时间与inode表条目i_crtime
一起存储,即每个文档的“文件创建时间,自纪元以来的秒数”。 参考链接 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.