【问题标题】:Delete directory based on date根据日期删除目录
【发布时间】:2013-07-30 12:17:32
【问题描述】:

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

例如:

假设 current_date = 20131130 (yyyymmdd)

subtracted_date=current_date - 90 天

假设有一个文件夹 20130621

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

【问题讨论】:

  • 出于实际目的,您可能还对 3 个月而不是 90 天感兴趣。这将是相当微不足道的。
  • 但是每个月不会有30天。它的客户规范是该文件夹在 90 天后被删除。
  • 查看目录名称(计算机上没有“文件夹”)并计算当天午夜的纪元时间。添加 90 * 24 * 3600(忽略夏令时偏移)。与当前时间进行比较。必要时删除。

标签: unix date


【解决方案1】:
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是修改时间

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

【讨论】:

  • 嗨...你能解释一下命令吗?我的意思是旗帜及其用途?我实际上是 unix 新手
  • 比较是根据目录名而不是ctime。也许在这种情况下它们是等价的,也许 ctime 实际上比名称更合适,但也许不是。
  • 可以根据文件夹名删除文件夹吗?但不是在创造的时候?这是为了测试目的。我创建了一些名称为 20120304、20130624、20120718 等的文件夹。这些文件夹是刚才创建的。所以我想根据文件夹名称而不是创建时间来删除。
  • 使用 touch -m (directory) (timestamp) 修改修改时间,更改括号部分或 touch -mt YYMMDDhhmm 该格式的时间,查看手册页了解更多信息
  • 是的,他们是真实的约会对象。如果有人打开超过 90 天的文件夹并进行一些修改怎么办?创建时间不会改变吗?
【解决方案2】:

删除前列出目录

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 {} \;

【讨论】:

    【解决方案3】:

    您可以使用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
    

    【讨论】:

    • 嗨....有一个名为 20130717 的文件夹。现在它提示我也删除这个文件夹。
    • date --date="90 days ago" +%Y%m%d 在您的系统上返回什么?
    • 这是结果:20130501
    • 你是在使用bash执行脚本吗?
    • 是的...我正在使用 bash。我正在执行您在 bash 中提供的用于测试的脚本,但实际上它应该在 zsh 中执行。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2021-12-17
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多