删除具有指定名称长度的子目录

我有一个自动化的部署者脚本,它将git提交到某个分支,编译并上传存档的二进制对象到云(S3)。 稍后,脚本login到EC2实例并下载档案并执行/启动项目/服务器。

到目前为止,这是完美的工作。 最近,我遇到了磁盘空间问题。 由于我也存储日志和维护当前/以前的工作提交,我的目录结构是这样的:

/path /current/ <- symlink /prev/ <- symlink /HASH00001/ /HASH00002/ /HASH00003/ /HASH00004/ /HASH00005/ /.../ /.../ /HASH0000n/ /some.log /some.log.1 /some.log.2.gz /... 

为了维护起见,我想删除/path中所有的特定git commit的SHA值的子目录。 但是,有一个警告, currentprev符号链接指向的目录不应该被删除。

到目前为止,我正在手动在任何面临存储问题的机器上。 我更喜欢我的部署脚本来照顾这一步。

我正在使用ls命令并根据上次访问时间戳对结果进行sorting:

 ls -drt | head -n -4 

并将xargs rm -rf传送给它。

我现在正在考虑修改它,以便只列出长度正好为40个字符的目录名称,然后删除目录。 符号链接到currentprev

我可以得到一些关于如何实现相同的指针!

这应该列出PATH目录下的每个40个字符长的文件夹,不包括currentprev符号链接指向的文件夹

 cd PATH find . -type d -name '????????????????????????????????????????' ! -name $(readlink current) ! -name $(readlink prev) -prune 

然后,要么-delete如果你find支持它或通过xargs rm -rfpipe道

注意:模式应该是40 ?