多くのサブフォルダを含む巨大なフォルダがありますが、3つの単語を含むフォルダを検索したいと思います。フォルダ名には3つの単語をすべて含める必要がありますが、単語の順序は重要ではありません。
APE
例: と という単語を含むBanana
フォルダを探したいと思いますTree
。
find folder -name '*APE*Banana*Tree*'
しかし、このコマンドは単語の順序を考慮しているので興味深いものではありませんが、これらの単語がどんな順序でも含まれているフォルダを探したいと思います。
答え1
3秒だけ使用してください-name
。
find folder -name '*APE*' -name '*Banana*' -name '*Tree*' -type d
パターンにワイルドカードを使用するのと同様に、名前-name
にユーザーロケールで有効な文字を形成しない文字シーケンスを含むファイルが失われる可能性があります。
そしてzsh
:
set -o extendedglob # best in ~/.zshrc
print -rC1 -- **/(*Banana*~^*APE*~^*Tree*)(ND/)
これ/
グローバル予選find
ディレクトリ-type d
タイプファイルを選択するのと同じですd
。
そしてksh93
:
FIGNORE='@(.|..)'
set -o globstar
set -- ~(N)**/@(*Banana*&*APE*&*Tree*)/
(($# == 0)) || printf '%s\n' "$@"
ksh93
glob修飾子はありませんが、/
globにaを追加すると、ディレクトリファイルまたはディレクトリシンボリックリンクへの拡張が制限されます。
そしてbash
:
shopt -s globstar dotglob nullglob extglob
set -- **/!(!(*Banana*)|!(*APE*)|!(*Tree*))/
(($# == 0)) || printf '%s\n' "$@"
ksh93
末尾については上記と同じです/
。
どこ:
D
、、、隠しファイルFIGNORE
もdotglob
報告されていることを確認してください(はいfind
)N
、、一致するものがない場合は、エラーを発生させたり、それ自体を拡張するのではなく、globを何も拡張しないようにします~(N)
。nullglob
globstar
zshの再帰ワイルドカード演算子を作成して理解ksh93
します。bash
**/
(x~^Y)
、、存在@(X&Y)
する!(!(X)|!(Y))
2つのパターンに一致するファイルを一致させる各シェルの3つの方法。