例如,如果我有一个目录,其中包含许多不同日期的文件,并且日期与文件名一起放置。如果我的其中一个文件名是,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
。