Symlink
我可以設置指向最新文件夾的符號連結嗎?
我有一些目錄:
drwxr-xr-x 10 shamoon staff 320B Mar 20 10:05 dryrun-20200320_140542-1vbczul4 drwxr-xr-x 10 shamoon staff 320B Mar 20 10:06 dryrun-20200320_140605-uze15jta drwxr-xr-x 10 shamoon staff 320B Mar 20 10:06 dryrun-20200320_140644-193bynci drwxr-xr-x 13 shamoon staff 416B Mar 20 10:07 dryrun-20200320_140721-fuv399ji drwxr-xr-x 13 shamoon staff 416B Mar 20 10:08 dryrun-20200320_140810-34dim70r drwxr-xr-x 14 shamoon staff 448B Mar 20 10:10 dryrun-20200320_140935-138yuidx drwxr-xr-x 14 shamoon staff 448B Mar 20 10:23 dryrun-20200320_141044-35pfvec6 drwxr-xr-x 14 shamoon staff 448B Mar 20 11:14 dryrun-20200320_151418-14g88zfr drwxr-xr-x 14 shamoon staff 448B Mar 20 12:11 dryrun-20200320_151800-gf551inz drwxr-xr-x 14 shamoon staff 448B Mar 20 12:21 dryrun-20200320_161134-wyu9kaxu
我想設置一個符號連結到最新的。現在,可能會創建更多最近的目錄,因此理想情況下,符號連結也應該自動更新。這可能嗎?
這是不可能自動完成的——Unix 沒有為符號連結提供動態更改的工具。但是,您可以在後台使用一個程序來更新符號連結
inotify
,並且後面的文件排序為後面的事實LC_COLLATE=C
:#!/bin/bash -e export LC_COLLATE=C shopt -s nullglob base=/path while inotifywait -e create \ -e moved_to \ -e moved_from \ -e close_write "$base" > /dev/null; do dirs=("$base"/dryrun-[0-9]*/) (( ${#dirs[@]} )) && ln -sfn -- "${dirs[-1]}" "$base"/latest done
這是它執行的結果:
% mkdir dryrun-20200320_140935-138yuidx % ls -l latest lrwxrwxrwx 1 cdown cdown 39 Mar 20 16:40 latest -> /path/dryrun-20200320_140935-138yuidx/ % mkdir dryrun-20200320_141044-35pfvec6 % ls -l latest lrwxrwxrwx 1 cdown cdown 39 Mar 20 16:40 latest -> /path/dryrun-20200320_141044-35pfvec6/