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

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

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

到目前为止,一切都运行正常。最近,我遇到了磁盘空间问题。由于我还存储日志并维护当前/以前的工作提交,因此我的目录结构如下:

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

为了维护,我想删除特定 git 提交的 SHA 值所在的所有子目录。但需要注意的是,不应删除和符号链接/path指向的目录。currentprev

到目前为止,我都是在遇到存储问题的任何机器上手动执行此操作。我希望我的部署脚本也能处理此步骤。

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

ls -drt | head -n -4

xargs rm -rf通过管道传送。

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

能否给我一些指点,告诉我如何实现同样的目标!

答案1

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

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

然后,-delete如果您find支持它,或者通过管道xargs rm -rf

注意:图案应为 40 ?

相关内容