在Unix中使用shell脚本删除超过10天的文件[重复]

Posted

技术标签:

【中文标题】在Unix中使用shell脚本删除超过10天的文件[重复]【英文标题】:Delete files older than 10 days using shell script in Unix [duplicate] 【发布时间】:2012-11-09 11:25:38 【问题描述】:

我是 shell 脚本的新手,谁能帮忙?我想删除文件夹中从当前日期回溯到 10 天的脚本。 脚本如下所示:

2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script

该脚本将使用 Crontab 每 10 天运行一次,这就是我需要当前日期的原因。

【问题讨论】:

你看过man date吗? 需要根据文件名删除还是文件修改时间删除? 我需要一个完整的脚本:) 我找到了一个例子,但我不确定这是否有好处: find /home/scripts/ 。 -name '*.script' -mtime +10 -exec rm -rf '' \; 【参考方案1】:

find 是此类任务的常用工具:

find ./my_dir -mtime +10 -type f -delete

解释

./my_dir你的目录(替换为你自己的) -mtime +10 10 天以上 -type f 仅限文件 -delete 毫不奇怪。 在执行整个命令之前删除它以测试您的 find 过滤器

并注意./my_dir 的存在以避免意外!

【讨论】:

find /home/scripts/*.script -mtime +10 type f -delete 可以删除这些吗? 2012.11.21.09_33_52.script 2012.11.21.09_33_56.script 2012.11.21.09_33_59.script 这取决于修改日期,如ls -l 显示的内容。日期是否与ls -l 相同?但是一个简单的测试会告诉你 =) 是的,这是脚本的创建日期 非常小心地为这些命令提供绝对路径!有一次,在 cron 作业中使用非常类似的命令,我不小心删除了生产邮件服务器上超过 10 天的所有文件,我可以告诉你,从中恢复并不有趣。 @DSimon 感谢您分享您的恐怖故事,帮助我们避免自己的恐怖故事!我有几个目录可以执行此操作,因此受到您的评论的启发,在我的 for a in ... 循环中,我在我的脚本中添加了一个 if [ -d $a ]; then...【参考方案2】:

只是添加上面的 shell 脚本来删除旧文件,但会记录和计算经过的时间

#!/bin/bash

path="/data/backuplog/"
timestamp=$(date +%Y%m%d_%H%M%S)    
filename=log_$timestamp.txt    
log=$path$filename
days=7

START_TIME=$(date +%s)

find $path -maxdepth 1 -name "*.txt"  -type f -mtime +$days  -print -delete >> $log

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log


... code for backup ...or any other operation .... >> $log


END_TIME=$(date +%s)

ELAPSED_TIME=$(( $END_TIME - $START_TIME ))


echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time ::  $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) "  >> $log

代码添加了一些东西。

时间戳命名的日志文件 指定的日志文件夹 find 仅在日志文件夹中查找 *.txt 文件 类型 f 确保您只删除文件 maxdepth 1 确保您不进入子文件夹 超过 7 天的日志文件将被删除(假设这是用于备份日志) 注意开始/结束时间 计算备份操作经过的时间...

注意:要测试代码,只需使用 -print 而不是 -print -delete。但请务必仔细检查您的路径。

注意:请确保通过 date - setup timezone/ntp 正确设置您的服务器时间。另外使用“stat filename”检查文件时间

注意:mtime 可以替换为 mmin 以获得更好的控制,因为 mtime 在处理获取文件的时间戳时会丢弃所有分数(超过 2 天(+2 天)实际上意味着 3 天)在几天的背景下

-mtime +$days  --->  -mmin  +$((60*24*$days))

【讨论】:

嗨@MarcoZen。我有 2 个finddelete 命令写入相同的$log。为什么它会创建三个日志文件,前两个没有内容,最后一个文件删除了文件列表。我该怎么做才能使查找和删除命令不生成多个文件? @FokwaBest - 你可以创建另一个日志文件吗?时间戳的 bcos ?您是否完全使用上述代码?你可以粘贴给我检查吗? 嗨@MarcoZen,我不得不删除_%H%M%S。对于小文件,只生成一个日志文件,但是当要删除的文件数量很大时,会生成多个不同_%H%M%S的日志文件。删除这部分后,所有内容都写入一个文件。 @FokwaBest - 有趣......我没有那个问题......很好,你已经解决了。我认为您多次调用此脚本?【参考方案3】:

如果你负担得起通过文件数据工作,你可以这样做

find -mmin +14400 -delete

【讨论】:

致anonymous editor:如果find-rm-rf 选项,哪个版本?

以上是关于在Unix中使用shell脚本删除超过10天的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

自动从 Google 共享驱动器中删除超过 X 天的文件?

学透shell 带你写常用的100个 shell 脚本(一)定时删除过期文件

如何在Unix中为shell脚本锁定目录[重复]

删除超过 7 天的文件

删除超过10天的数据

unix环境下shell脚本如何往文本文件的头部加入utf8 bom头EEBBBF?如何删除bom