根据日期删除目录

Jah*_*avi 0 unix date

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

例如:

假设current_date = 20131130(yyyymmdd)

减去日期=当前日期-90天

可以说有一个文件夹20130621

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

exu*_*sum 5

find path -type d -ctime +90 -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

应该找到所有超过90天的目录并在它们上使用rm -rf

请谨慎使用该命令,尽管您可能想先使用此命令对其进行测试

find path -type d -ctime +90 -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)

为了让某些文件夹考虑-mtime而不是-ctime并经常触摸该文件夹

path上面替换为您要扫描和删除的实际路径

说明

find 是命令

path 是您要扫描的根目录

-type d 表示仅查找目录

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

-exec rm -rf {} \; 意味着递归删除并强制删除找到的项目

-mtime 修改时间

第二个命令将列出所有将被删除的文件夹,因此在测试时运行起来更加安全


dev*_*ull 2

您可以使用该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
Run Code Online (Sandbox Code Playgroud)

要执行实际的目录删除,您可以将第三行替换为以下内容:

  (($del > $(basename $i)))  && rm -rf $i
Run Code Online (Sandbox Code Playgroud)

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

$ ls -1F
20120102/
20130104/
20130302/
20130402/
20130502/
20130602/
20130702/
Run Code Online (Sandbox Code Playgroud)

执行上面的脚本会告诉我们:

$ bash cleanup
delete ./20130302
delete ./20130104
delete ./20120102
delete ./20130402
dont delete ./20130702
dont delete ./20130502
dont delete ./20130602
Run Code Online (Sandbox Code Playgroud)