Linux 根据“文件名为日期”删除所有超过30天的文件

Linux 根据“文件名为日期”删除所有超过30天的文件,linux,bash,Linux,Bash,我是bash新手,我的任务是删除所有超过30天的文件,我可以根据文件名Y\u m\u D.ext2019\u 04\u 30.txt 我知道我可以用ls在包含文件的文件夹中列出所有文件。我知道我可以使用$date获取今天的日期,并可以将其配置为与文件格式$date“+%Y\u%m\u%d” 我知道我可以使用rm删除文件 我如何将所有这些结合到一个bash脚本中,以删除从今天开始超过30天的文件 在伪python代码中,我猜它看起来像: for file in folder: if fil

我是bash新手,我的任务是删除所有超过30天的文件,我可以根据文件名
Y\u m\u D.ext
2019\u 04\u 30.txt

我知道我可以用
ls
在包含文件的文件夹中列出所有文件。我知道我可以使用
$date
获取今天的日期,并可以将其配置为与文件格式
$date“+%Y\u%m\u%d”

我知道我可以使用
rm
删除文件

我如何将所有这些结合到一个bash脚本中,以删除从今天开始超过30天的文件

在伪python代码中,我猜它看起来像:

for file in folder:
    if file.name to date > 30 day from now:
        delete file

我绝不是系统管理员,但是你可以考虑一个简单的shell脚本:
# Generate the date in the proper format
discriminant=$(date -d "30 days ago" "+%Y_%m_%d")

# Find files based on the filename pattern and test against the date.
find . -type f -maxdepth 1 -name "*_*_*.txt" -printf "%P\n" |
while IFS= read -r FILE; do
    if [ "${discriminant}" ">" "${FILE%.*}" ]; then
        echo "${FILE}";
    fi
done

请注意,这可能会被专业人士视为“外行”解决方案。很遗憾,我不习惯使用
awk
,这可能会更好地处理此问题。

下面是另一个删除30天以上日志文件的解决方案:

#!/bin/sh

# A table that contains the path of directories to clean
rep_log=("/etc/var/log" "/test/nginx/log")
echo "Cleaning logs - $(date)."

#loop for each path provided by rep_log 
for element in "${rep_log[@]}"
do
   #display the directory
    echo "$element";
    nb_log=$(find "$element" -type f -mtime +30 -name "*.log*"| wc -l)
    if [[ $nb_log != 0 ]] 
    then
            find "$element" -type f -mtime +30 -delete 
            echo "Successfull!"
    else
            echo "No log to clean !"
    fi
done
允许包含用于删除文件的多个目录

rep_log=("/etc/var/log" "/test/nginx/log")
我们填充var:我们正在搜索(在提供的目录中)超过30天的文件,并且其名称至少包含.log。然后统计文件的数量

nb_log=$(find "$element" -type f -mtime +30 -name "*.log*"| wc -l)
然后,我们检查是否存在除0以外的结果(posisitive),如果是,则删除

find "$element" -type f -mtime +30 -delete

对于删除超过X天的文件,您可以使用此命令并在
/etc/crontab

find/PATH/TO/LOG/*-mtime+10 | xargs-d'\n'rm


find/PATH/TO/LOG/*-type f-mtime+10-exec rm-f{}\

第一步是将字符串“YYYY\u MM\u DD.txt”转换为历元时间。在有纪元时间之前,不要费心尝试比较日期。
date--date“2019/04/30”+%s“
date+%s”
为您提供给定日期的时间戳,今天,您只需转换文件名,然后比较戳记副本有多个附加解决方案,虽然没有一个被提升。对不起,StackOverflow是一个英语论坛。请将您的答案翻译成英语(法语)是的,对不起,我没有通知您我是用法语回复的。仅供参考:您的答案是根据修改日期删除文件,而问题是根据文件名解释为日期删除文件。