Linux 自动删除目录中的文件夹删除错误的文件夹

Linux 自动删除目录中的文件夹删除错误的文件夹,linux,bash,Linux,Bash,我正在尝试编写一个小的bash脚本,它将由cronjob每月调用 给定文件夹结构,如pingLog->2020->Jan->04,每个月的第一个月,它必须自动删除两个月前的文件夹: if [ -d ".../pingLog/$( date +'%Y/%b' -d '2 month ago' )/" ]; then sudo rm -r ".../pingLog/$( date +'%Y/%b' -d '2 month ago' )/"

我正在尝试编写一个小的bash脚本,它将由cronjob每月调用

给定文件夹结构,如
pingLog->2020->Jan->04
,每个月的第一个月,它必须自动删除两个月前的文件夹:

if [ -d ".../pingLog/$( date +'%Y/%b' -d '2 month ago' )/" ];
then
    sudo rm -r ".../pingLog/$( date +'%Y/%b' -d '2 month ago' )/"        
fi
如果“年”文件夹为空,则必须将其删除:

if [ $( "find .../pingLog/ -maxdepth 1 -type d -empty"; ) ];
then
    sudo rm -r $( "find .../pingLog/ -maxdepth 1 -type d -empty"; )
fi
脚本(可能是第二个if的条件)中的某些内容不起作用,因为文件夹不应该验证正在删除的if条件,但我找不到错误

编辑 @dash-o您的解决方案有两个问题。出于测试目的,我创建了一个
2019
文件夹,其中包含
Nov
(2个月前)

如果在第二次之后尝试手动启动脚本,则输出如下:

Folders: .../pingLog/2019/Nov have been deleted.
Folders: .../pingLog/2019 have been deleted.
find: ‘.../pingLog/2019’: No such file or directory
rmdir: missing operand
Try 'rmdir --help' for more information.
这是我的两个问题:

  • 即使
    find
    失败,也不带if条件的回显打印

  • 当它们失败时,我无法在文件上打印
    find
    rmdir
    输出


    • 简化脚本和解决问题的两条建议

    • 对于删除,无需测试目录是否存在。只需使用“rm-rf”即可删除与2个月前的文件夹关联的文件夹

    • 对于年度删除,您希望修改将删除范围限制为上一年度日志文件,并使用rmdir而不是“rm-r”。它将降低删除可能包含数据的其他目录的风险


    • 命令替换中删除双引号
      $()
      ,应该是这样的:
      $(find…/pingLog/-maxdepth 1-type d-empty)
      ..(3点)可能语法不正确。我建议提前检查
      日期+“%Y/%b'-d”2个月前的输出是否为空。否则可能会有意外。1)删除引号并不能解决问题,请从引号中取出
      find
      。2) 这3个点不是语法错误,而是缩短文件夹地址的一种方法。3) 如果不是我上面写的if条件,如何检查
      日期
      输出是否为空?
      T=.../pingLog
      sudo rm -rf "$T/$(date +'%Y/%b' -d '2 month ago')"
      find "$T/$(date '+%Y' -d '2 month ago')" -maxdepth 0 -type d -empty | xargs sudo rmdir