2013-07-30 48 views
0

我正在写zsh脚本,其中我必须从当前日期获得前90天的日期,即我必须从当前日期减去90天。然后我必须检查具有不同日期的文件夹作为他们的名字。我必须比较目录日期和减去的日期,如果结果大于减去的日期,我必须删除目录。删除基于日期的目录

例如:

让我们说CURRENT_DATE = 20131130(年月日)

subtracted_date = CURRENT_DATE - 90天

可以说有一个文件夹20130621

现在这个文件夹名称应该与减去的日期进行比较。如果大于subtracted_date,那么我必须删除目录。

+0

出于实用的目的,您可能还会对3个月而非90天感兴趣。这将是相当微不足道的。 –

+0

但是每个月都不会有30天。并且它的客户端规范说明该文件夹在90天后会被完全删除。 – Jahnavi

+0

查看目录的名称(计算机上没有“文件夹”)并计算当天午夜的纪元时间。添加90 * 24 * 3600(忽略夏令时偏移)。与当前时间比较。根据需要删除。 –

回答

0

您可以使用date命令查找当前日期90天前的日期。下面的脚本应该给你需要删除的目录列表:

del=$(date --date="90 days ago" +%Y%m%d) 
for i in `find . -type d -name "2*"`; do 
    (($del > $(basename $i))) && echo "delete $i" || echo "dont delete $i" 
done 

要执行目录的实际删除,你可以用下面的替换第三行:

(($del > $(basename $i))) && rm -rf $i 

例如,如果当前目录包含以下文件夹:

$ ls -1F 
20120102/ 
20130104/ 
20130302/ 
20130402/ 
20130502/ 
20130602/ 
20130702/ 

执行上面的脚本会告诉:

$ bash cleanup 
delete ./20130302 
delete ./20130104 
delete ./20120102 
delete ./20130402 
dont delete ./20130702 
dont delete ./20130502 
dont delete ./20130602 
+0

嗨....有一个名称为20130717的文件夹。现在它的提示我也删除此文件夹。 – Jahnavi

+0

'date --date =“90 days ago”+%Y%m%d'你系统上的回报是什么? – devnull

+0

这是结果:20130501 – Jahnavi

3
find path -type d -ctime +90 -exec rm -rf {} \; 

,应找出所有目录年龄超过90天,使用RM -rf他们

小心那个命令虽然你可能会想这个

find path -type d -ctime +90 -exec echo {} \; 

在第一测试为了保持某些文件夹考虑-mtime而不是-ctime并且每隔一段时间触摸文件夹

替换path以上要扫描并删除

解释

find是命令

path的实际路径是要扫描

-type d意味着寻找目录仅

根目录

-ctime +90表示创建时间超过90天

-exec rm -rf {} \;手段递归删除和强制删除被发现

-mtime被修改时间的项目

第二个命令会列出该会因此删除所有文件夹更安全,而你正在测试

运行
+0

嗨... 你能解释一下我的命令吗?我的意思是旗帜和他们的用途?我实际上是unix的新手 – Jahnavi

+0

比较是基于目录名而不是ctime。也许它们在这种情况下是等价的,也许ctime实际上比名称更合适,但也许不是。 –

+0

将其添加到帖子 – exussum

0

列出目录之前删除

find . -type f -ctime +60 -ls 

列表文件之前在当前目录删除

find . -type f -ctime +60 -ls 

删除目录

find . -type d -ctime +60 -exec rm -rf {} \; 

删除的文件在当前目录

find . -type f -ctime +60 -exec rm -rf {} \;