3

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

例如:

假设 current_date = 20131130 (yyyymmdd)

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

假设有一个文件夹 20130621

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

4

4 回答 4

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

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

于 2013-07-30T11:20:34.940 回答
3

删除前列出目录

find . -type d -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 {} \;
于 2017-10-06T09:28:36.660 回答
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

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

  (($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
于 2013-07-30T11:56:51.047 回答
1

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

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

于 2018-07-19T10:12:27.933 回答