web-dev-qa-db-ja.com

最新のフォルダへのシンボリックリンクを設定できますか?

私はいくつかのディレクトリを持っています:

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

最新のものへのシンボリックリンクを設定したい。現在、より新しいディレクトリが作成されている可能性があるため、理想的には、シンボリックリンクも自動的に更新されるはずです。これは可能ですか?

14
Shamoon

これを自動的に行うことはできません-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/
21
Chris Down

いいえ。シンボリックリンクではありませんが、Fuseファイルシステムをマウントすることで可能です。これを行うFuseファイルシステムについては知りません。しかし、それを作成することは可能です。

7
ctrl-alt-delor