cd/ln コマンドの "*" ワイルドカード文字出力のソート

cd/ln コマンドの "*" ワイルドカード文字出力のソート

一部のファイルを特定のディレクトリ(この場合はレプリケートされたリポジトリからホストOS(この場合はmacos)のテーマフォルダに移動)にシンボリックリンクするのに役立つ小さなスクリプトを作成しました。とにかく問題は、Blenderが管理する新しいフォルダを作成することです。各バージョン自体のデフォルト設定

3.1
└ Config
└ Scripts
└ Startup

3.2
└ Config
└ Scripts
└ Startup

。など。

「*」ワイルドカードを使用してこれを表すことができることがわかりましたが、lnコマンドに対して最も高い数値を持つフォルダを選択する方法が必要です。

役に立つなら、これまで私が思いついたコマンドは次のようになります。

ln -sf /'path to theme file' '.../'directory with highest numerical value'/.../interface-theme')

答え1

そしてzsh

() {
  ln -sf -- /'path to theme file' $argv[-1]/interface-theme
} '.../'*'/...(/n)

ここで、nglob修飾子はglobを有効にしnumericglobsort(次の間の代わりに順序付け3.10)、globを次の種類のファイルに制限します。3.93.13.2/目次(代替は-/ディレクトリへのシンボリックリンクも考慮します。*シンボリックリンク自体に従います。)順序付けられたディレクトリのリストを匿名関数に渡します。ここでは、$argv[-1]コマンド()の最後の引数を使用しますln

または、eglob修飾子を使用してリンク名を追加し、[-1]最後のglob拡張を選択します。

ln -sf -- /'path to theme file' '.../'*'/...(/n[-1]e[REPLY+=/interface-theme])

bash(GNUシェル)4.4以降およびGNUユーティリティを使用すると、次のことができます。

print0() {
  (( $# == 0 )) || printf '%s\0' "$@"
}
readarray -td '' dirs < <(
  shopt -s nullglob
  print0 '.../'*'/...'/ |
    sort -zrV
) &&
  (( ${#dirs[@]} )) &&
  ln -sf -- /'path to theme file' "${dirs[1]}"interface-theme

-V(別名)はglob修飾子と--version-sort同様のソートを実行します。 's(ディレクトリの選択とそのディレクトリへのシンボリックリンクの選択)に似ていますが、追加されます。zshn*/zsh*(-/)/

またはzsh、使用可能であると仮定すると、次のようにすることができます。

zsh -c '
  ln -sf -- /"path to theme file" ".../"*"/...(/n[-1]e[REPLY+=/interface-theme])'

関連情報