ls コマンドの場合
ls -t | head -n1
ls コマンドで、時刻順に並べることができるので、これを head と組み合わせれば出来る。
takuya@Gitlab:~$ sudo ls -lt /var/opt/gitlab/backups/ total 92268132 -rw------- 1 git git 43629199360 Apr 25 02:20 1587748340_2020_04_25_12.9.2_gitlab_backup.tar drwx------ 7 git git 4096 Apr 4 03:40 tmp -rw-r--r-- 1 takuya takuya 47202314240 Apr 4 02:17 1585836147_2020_04_02_12.9.2_gitlab_backup.tar -rw------- 1 git git 3651025200 Apr 3 22:25 registry.tar.gz
ただし、取り出せるのは「basename」のファイル名です。
サンプル
takuya@Gitlab:~$ sudo ls -t /var/opt/gitlab/backups/ | head -n 1 1587748340_2020_04_25_12.9.2_gitlab_backup.tar
find コマンドでやる場合
find コマンドでもできます。
最新の1件だけを取り出すには、head と組み合わせれば大丈夫かな。
find /var/opt/gitlab/backups/ -type f -printf "%T@ %p\n" | sort -nr| head -n 1
動作の原理について
find コマンドには printf のオプションがあって、これを使ってsort してあげれば、カンタンに実現できます。
takuya@Gitlab:~$ sudo find /var/opt/gitlab/backups/ -type f -printf "%T@ %Tc %p\n" | sort -nr [sudo] password for takuya: 1587748816.6963751750 Sat Apr 25 02:20:16 2020 /var/opt/gitlab/backups/1587748340_2020_04_25_12.9.2_gitlab_backup.tar 1585934261.3147121750 Sat Apr 4 02:17:41 2020 /var/opt/gitlab/backups/1585836147_2020_04_02_12.9.2_gitlab_backup.tar 1585920302.0000000000 Fri Apr 3 22:25:02 2020 /var/opt/gitlab/backups/registry.tar.gz
find の場合は、パス名で返ってくる。 パスで取れるのは、ls に比べて便利かもしれない。
最新ファイルのフルパスがほしいときは、 find の引数にフルパスを入れてあげればいいのだから。
動作サンプル
takuya@Gitlab:~$ sudo find /var/opt/gitlab/backups/ -type f -printf "%T@ %p\n" | sort -nr| head -n 1 | cut -d' ' -f2 /var/opt/gitlab/backups/1587748340_2020_04_25_12.9.2_gitlab_backup.tar
参考資料
https://superuser.com/questions/294161/unix-linux-find-and-sort-by-date-modified