He visto algunos liners usando ls, pero me gustaría evitar eso.
Estoy escribiendo un script que copia el código a mi servidor en una carpeta con marca de tiempo. La versión 'actual' siempre está vinculada a una ruta constante. De esa manera, puedo retroceder si algo sale mal. Ahora, cada implementación crea una nueva carpeta, pero me gustaría conservar solo las 3 últimas.
Aquí está mi versión actual:
ls -tp | grep '/$' | grep -v 'current\|shared' | tail -n +4 | xargs -d '\n' rm -rf --
Esto se ejecuta en la carpeta que contiene, excluye los archivos y las dos carpetas 'actual' y 'compartida' que quiero mantener (actualmente el enlace simbólico mencionado anteriormente), y elimina todos menos los 3 más nuevos según lo ordenado ls -t
.
¿Hay alguna forma de hacerlo sin ls
usar solo bash y la cadena de herramientas gnu?
Todas las carpetas destinadas a la poda se nombran siguiendo este formato:
$timestamp.$branch.$sha1
Donde SHA1 y branch son información de git sobre qué se implementó exactamente.
El servidor ejecuta Ubuntu Xenial.
Editar: proporcione algunos ejemplos de cómo se ven las carpetas
Aquí hay una lista de la carpeta de implementación, cómo se ve ahora:
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/