「/」の発生回数に基づいて結果をソートし、$ 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
最初の項目()を選択します。O
d
[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
}