在 linux/bash/unix 中比较文件名和日期并在 30 天后删除它们

在 linux/bash/unix 中比较文件名和日期并在 30 天后删除它们

例如,如果我有一个目录,其中包含许多不同日期的文件,并且日期与文件名一起放置。如果我的其中一个文件名是,tr_2017-12-05.html并且该文件的日期2017-12-05比今天的日期早 30 天2018-01-10,则需要删除较旧的文件。它的 Linux 脚本是什么?

答案1

如果文件名有其真实的创建日期,请使用 find 删除它们

find /path/ -ctime +30 -exe rm -f {} \;

将删除过去 30 天及之前创建的文件

答案2

这应该适合你:

#!/bin/bash

directory=./

for file in $(find $directory -maxdepth 1); do
    a='[^0-9]*([[:digit:]]{4}).([[:digit:]]{2}).([[:digit:]]{2})'
    [[ $file =~ $a ]];
    year=${BASH_REMATCH[1]}
    month=${BASH_REMATCH[2]}
    day=${BASH_REMATCH[3]}
    # echo "Year=$year Month=$month Day=$day"
    mydate=$year$month$day
    if [[ $mydate ]]; then
    [[ "$(date -d "$mydate" +'%s')" -gt "$(date -d "30 days ago" +'%s')" ]] && 
    echo rm -i "$file"
    fi
done

如果文件列表符合您的期望,请删除命令echo中的rm

相关内容