Назад | Перейти на главную страницу

Удалить подкаталоги с указанной длиной имени

У меня есть сценарий автоматического развертывания, который принимает коммит git в определенную ветку, компилирует и выгружает заархивированные двоичные объекты в облако (S3). Позже сценарий регистрируется в экземпляре EC2, загружает архивы и выполняет / запускает проект / сервер.

Пока это работает безупречно. Недавно я столкнулся с проблемами дискового пространства. Поскольку я также храню журналы и поддерживаю текущие / предыдущие рабочие коммиты, моя структура каталогов выглядит примерно так:

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

Ради обслуживания я хочу удалить все подкаталоги в /path которые являются конкретным значением SHA для git commit. Но есть предостережение, что каталоги, на которые указывает current и prev символические ссылки не должны удаляться.

Пока что я делаю это вручную на той машине, на которой возникает проблема с хранением. Я бы предпочел, чтобы мой сценарий развертывания также позаботился об этом шаге.

Я использовал ls команда и сортировка результатов по метке времени последнего доступа:

ls -drt | head -n -4

и трубопровод xargs rm -rf к нему.

Теперь я подумываю изменить его, чтобы в списке отображались только имена каталогов длиной ровно 40 символов, а затем удалить каталоги. символическая ссылка на current и prev.

Могу ли я получить несколько советов о том, как я могу добиться того же!

Это должно перечислить все папки длиной 40 символов чуть ниже вашего PATH каталог, за исключением папок, указанных current и prev символические ссылки

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

Тогда либо -delete если ваш find поддерживает его или протекает через xargs rm -rf

ПРИМЕЧАНИЕ: шаблон должен быть 40 ?.