加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash脚本根据文件名中的日期查找旧文件

发布时间:2020-12-15 21:50:52 所属栏目:安全 来源:网络整理
导读:我正在开发一个bash脚本,需要根据一个变量来搜索单个目录中“旧”的文件,该变量指定在超过阈值之前需要经过多少天并且文件被标记为动作(可以是任何内容)从移动到存档到删除等…). 问题在于文件的修改时间与确定文件在采取操作之前需要多长时间无关,因为文件
我正在开发一个bash脚本,需要根据一个变量来搜索单个目录中“旧”的文件,该变量指定在超过阈值之前需要经过多少天并且文件被标记为动作(可以是任何内容)从移动到存档到删除等…).

问题在于文件的修改时间与确定文件在采取操作之前需要多长时间无关,因为文件可能不经常更改,脚本的执行时间可能会有所不同等等…

确定保存文件的时间是以YYYY-MM-DD(或带有date命令的%F)形式的实际文件名.以文件名内容为例 – 2011-05-23.txt.可以在此目录中运行哪些命令来查找超过一定天数的所有文件(我的阈值当前设置为7天,可能会更改)并打印出他们的文件名?

解决方法

在BSD中,-j用于防止设置日期,-f参数用于设置输入日期的格式. :

首先,你需要在1970年1月1日以来的天数中找到今天的日期:

today=$(date -j -f "%Y-%m-%d" 1969-12-31 +%s)

现在,您可以使用它来查找七天前的时间:

((cutoff = $today - 604800))

数字604800是七天内的秒数.

现在,对于目录中的每个文件,您需要找到字符串的日期部分.我不知道更好的方法. (也许有人知道一些Bash魔法).

find . -type f | while read fileName
do
     fileDate=$(echo $foo | sed 's/.*-([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]).*/1/')
     yadda,yadda,yadda #Figure this out later
done

一旦我们有了文件日期,我们就可以使用date命令来确定该日期是否以秒为单位(小于截止日期)

today=$(date -j -f "%Y-%m-%d" 1969-12-31 +%s)
((cutoff = $today - 604800))
find . -type f | while read fileName  #Or however you get all the file names
do
     fileDate=$(echo $foo | sed 's/.*-([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]).*/1/')
     fileDateInSeconds=$(date -j -f "%Y-%m-%d" $fileDate +%s)
     if [ $fileDateInSeconds -lt $cutoff ]
     then
          rm $fileName
     fi
done

在Linux中,使用-d参数定义必须采用YYYY-MM-DD格式的日期:

today=$(date +"%Y-%m-%d)

现在,你可以拿走它并找到秒数:

todayInSeconds=(date -d $today +%s)

其他一切应该或多或少与上面相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读