繁体   English   中英

如何删除具有X天有效期(而不是最后修改)的文件。 可能吗 的Linux

[英]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文件系统,则会有一些希望。 您可以使用statdebugfs实用程序来检索它。 ext4将创建时间与inode表条目i_crtime一起存储,即每个文档的“文件创建时间,自纪元以来的秒数”。 参考链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM