Linux 根据“文件名为日期”删除所有超过30天的文件
我是bash新手,我的任务是删除所有超过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
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是一个英语论坛。请将您的答案翻译成英语(法语)是的,对不起,我没有通知您我是用法语回复的。仅供参考:您的答案是根据修改日期删除文件,而问题是根据文件名解释为日期删除文件。