Я видел некоторые лайнеры, использующие ls, но я бы хотел этого избежать.
Я пишу скрипт, который копирует код на мой сервер в папке с метками времени. «Текущая» версия всегда связана с постоянным путем. Таким образом, я могу откатиться, если что-то пойдет не так. Теперь при каждом развертывании создается новая папка, но я бы хотел оставить только 3 последних.
Вот моя текущая версия:
ls -tp | grep '/$' | grep -v 'current\|shared' | tail -n +4 | xargs -d '\n' rm -rf --
Это выполняется в содержащей папке, исключая файлы и две папки 'current' и 'shared', которые я хочу сохранить (текущая фактически является вышеупомянутой символической ссылкой), и удаляет все, кроме 3 самых новых, отсортированных по ls -t
.
Есть ли способ, которым я могу сделать это без ls
, и только используя bash и gnu toolchain?
Все папки, предназначенные для обрезки, имеют следующий формат:
$timestamp.$branch.$sha1
Где SHA1 и branch это информация из git о том, что именно было развернуто.
На сервере работает Ubuntu Xenial.
Изменить: приведите несколько примеров того, как выглядят папки
Вот список из папки развертывания, как это выглядит прямо сейчас:
drwxr-x--- 13 app www-data 4096 Mar 29 00:10 1490738956.develop.b806/
drwxr-x--- 13 app www-data 4096 Mar 29 00:19 1490739485.develop.ae01/
drwxr-x--- 14 app www-data 4096 Mar 29 03:33 1490751118.develop.f5b0/
lrwxrwxrwx 1 app www-data 40 Mar 29 03:33 current -> /home/app/deploy/1490751118.develop.f5b0/
drwx------ 5 app root 4096 Mar 10 04:12 shared/