Linux 自动删除目录中的文件夹删除错误的文件夹
我正在尝试编写一个小的bash脚本,它将由cronjob每月调用 给定文件夹结构,如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' )/"
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.
这是我的两个问题:
- 即使
失败,也不带if条件的回显打印find
- 当它们失败时,我无法在文件上打印
和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