4つのサブディレクトリを含む親ディレクトリがあるとします。各サブディレクトリには同じコンテンツが含まれています。また、各サブディレクトリ名は整数であり、整数が大きいほどディレクトリとその内容は最新バージョンです。
例:
親ディレクトリ/
-> 1/
-> 2/
-> 6/
-> 3/
パスで指定された最大のサブディレクトリを取得する方法は次のとおりです。
/user/mosawi/parentdir/${NEWEST}/payload.gzip
これは次のように評価されます。
/user/mosawi/parentdir/6/payload.gzip
答え1
最新のカタログが必要ですか?今数字のいたずらをやめて、zsh
こうやってみましょう。
NEWEST=(/user/mosawi/parentdir/*(/om[1]))
NEWESR=${NEWEST}/payload.gzip
秘密はglob修飾子を使用してソートすることです(ああ)目次(/)時間変更(米)と最初([1])。
答え2
数値の桁数が等しい場合は、一般的なソート順を使用する必要があります。その後、配列を名前で埋め、最後の要素を取得できます。
$ mkdir -p parentdir/{1,2,6,3}
$ A=(parentdir/*) # fill an array with the names
$ echo "${A[-1]}" # print the last member of the array
parentdir/6
$ echo "${A[-1]##*/}" # remove everything up to last /
6
ただし、数字が異なる場合には適用されません(シーケンスは、、、、1
... )。それでは手動で最大値を探してみましょう。13
2
$ mkdir -p parentdir/{1,2,6,3,13}
$ max=0; # assuming they're non-negative integers!
$ for x in parentdir/* ; do
n=${x##*/}; # take just the number so that comparisons work
[ "$n" -gt "$max" ] && max=$n
done
$ echo "$max"
13
前者の方法ははるかに簡単で、可能であれば固定長に前にゼロを付けて名前を作成することを検討する価値があります。
答え3
mkdir -p parentdir/{1,2,6,3,13}
ただls
、ソートされていません:
ls parentdir/
1 13 2 3 6
今並べ替え:
ls parentdir/ -v
1 2 3 6 13
最後の項目をソートしてインポートします。
ls parentdir/ -v | tail -n1
13
利点:ループなし、シングルライン
反対: 外部コマンド呼び出し
答え4
ディレクトリ名の順序が正しく指定されているとします(つまり、同じ桁数が含まれており、ディレクトリに数字以外の名前がない)。
newest="$(printf '%s\n' /user/mosawi/parentdir/* | tail -n 1)"
ファイルは"$newest/payload.gzip"
。
別のトリックは、新しいディレクトリを作成するときに最新のディレクトリへのシンボリックリンクを作成することです。
mkdir "parentdir/$i" && ln -sf "parentdir/$i" parentdir/latest
これによりアクセスが簡単ですparentdir/latest/payload.gzip
。