У меня есть сценарий автоматического развертывания, который принимает коммит 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
?
.