在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 个find
和delete
命令写入相同的$log
。为什么它会创建三个日志文件,前两个没有内容,最后一个文件删除了文件列表。我该怎么做才能使查找和删除命令不生成多个文件?
@FokwaBest - 你可以创建另一个日志文件吗?时间戳的 bcos ?您是否完全使用上述代码?你可以粘贴给我检查吗?
嗨@MarcoZen,我不得不删除_%H%M%S
。对于小文件,只生成一个日志文件,但是当要删除的文件数量很大时,会生成多个不同_%H%M%S
的日志文件。删除这部分后,所有内容都写入一个文件。
@FokwaBest - 有趣......我没有那个问题......很好,你已经解决了。我认为您多次调用此脚本?【参考方案3】:
如果你负担得起通过文件数据工作,你可以这样做
find -mmin +14400 -delete
【讨论】:
致anonymous editor:如果find
有-rm-rf
选项,哪个版本?以上是关于在Unix中使用shell脚本删除超过10天的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章