根据日期删除目录

时间:2013-07-30 11:16:09

标签: unix date

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

例如:

让我们说current_date = 20131130(yyyymmdd)

subtracted_date = current_date - 90天

假设有一个文件夹20130621

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

4 个答案:

答案 0 :(得分:4)

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是修改时间

第二个命令将列出所有要删除的文件夹,以便在测试时更安全地运行

答案 1 :(得分:1)

您还可以使用以下命令按日期删除当前目录中的所有文件。

[jamshi @ cpanel〜] $ rm -rf ls -l | grep 'Jul 19 15:32' | tr -s ' ' | cut -d ' ' -f9

答案 2 :(得分: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

答案 3 :(得分:0)

删除前列出目录

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

删除前列出文件

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

删除当前目录中的目录

NOT IN

删除当前目录中的文件

NOT IN (foo, bar, ..)