単語の順序が重要ではない複数の単語を含むファイルを見つける

単語の順序が重要ではない複数の単語を含むファイルを見つける

多くのサブフォルダを含む巨大なフォルダがありますが、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' "$@"

ksh93glob修飾子はありませんが、/globにaを追加すると、ディレクトリファイルまたはディレクトリシンボリックリンクへの拡張が制限されます。

そしてbash

shopt -s globstar dotglob nullglob extglob
set -- **/!(!(*Banana*)|!(*APE*)|!(*Tree*))/
(($# == 0)) || printf '%s\n' "$@"

ksh93末尾については上記と同じです/

どこ:

  • D、、、隠しファイルFIGNOREdotglob報告されていることを確認してください(はいfind
  • N、、一致するものがない場合は、エラーを発生させたり、それ自体を拡張するのではなく、globを何も拡張しないようにします~(N)nullglob
  • globstarzshの再帰ワイルドカード演算子を作成して理解ksh93します。bash**/
  • (x~^Y)、、存在@(X&Y)する!(!(X)|!(Y))2つのパターンに一致するファイルを一致させる各シェルの3つの方法

関連情報