最も近い一致フォルダを探す

最も近い一致フォルダを探す

「/」の発生回数に基づいて結果をソートし、$ find . -name scripts -type d最初の結果を選択する最良の方法は何ですか?

cd私のプロジェクトのパブリックフォルダを指す関数を作成したいと思います。私はそれがあなたの相対ディレクトリに基づいて柔軟になりたいです。

したがって、フォルダ構造がすべて似ている10のプロジェクトがある場合:

~/project-a/project/folder/structure
~/project-b/project/folder/structure
~/project-c/project/folder/structure

私はできます:

$ cd ~/project-a
$ cdd structure

~/project-a/project/folder/struct に配置されます。

修正する

たとえば、次のように予測可能な方法で結果を並べ替えることはできません。

$ find . -type d -name "themes"

./wp-content/plugins/contact-form-7/includes/js/jquery-ui/themes
./wp-content/plugins/jetpack/modules/infinite-scroll/themes
./wp-content/plugins/smart-youtube/themes
./wp-content/plugins/wptouch-pro/themes
./wp-content/themes
./wp-includes/js/tinymce/themes

cdd関数が最も近い結果に降りたいのです。この例ではです./wp-content/themes

ベストアンサー1

これにより、zsh次のことができます。

cdd() cd -- **/$1(/Od[1])

cdd themes

このcdd機能は、あらゆる種類のファイルを検索します。目次/)に引数として与えられた名前を使用してepthでソートし、$1最初の項目()を選択します。Od[1]

D非効率的な点は、現在のディレクトリに一致するディレクトリがある場合でも、ディレクトリツリー全体をクロールすることです(隠しディレクトリをスキップして変更するためにglob修飾子を追加します)。

一度に 1 つのレベルでディレクトリ ツリーをナビゲートするには、次の手順を実行します。

cdd() {
  local dirs matches
  dirs=(.)
  while (($#dirs)) {
    matches=($^dirs/$1(N/[1]))
    if (($#matches)) {
      cd $matches[1]
      return
    }
    dirs=($^dirs/*(/N))
  }
  print >&2 Not found
  return 1
}

おすすめ記事