名前が 2 つのパターンと一致する Bash ですべてのファイルを開くまたは一覧表示する方法

名前が 2 つのパターンと一致する Bash ですべてのファイルを開くまたは一覧表示する方法

何千ものファイルがあるディレクトリがあるとしましょう。名前に「red」と「green」という文字列の両方を含むすべてのファイルを開く方法は?

ベストアンサー1

find . -type f -name '*red*' -name '*green*'  -exec echo {} +

または、ファイルを開くために使用したいコマンドechoに置き換えます。vigvimless

一部のプログラムはコマンドラインで複数のファイル名を処理できません。選択したプログラムがこれらのいずれかである場合は、+行末をに置き換えます\;。これにより、長いファイル名のリストに対して一度だけ実行されるのではなく、各ファイル名に対して一度だけコマンドが実行されます。

xdg-openそれが順番です。開くように要求されたファイル形式を検出し、システムの基本プログラム(または基本プログラムをオーバーライドした場合は優先するプログラム)を使用してファイルを開きます。ファイルの種類が認識されない場合は、ファイルを開くときに何を使うべきかを尋ねます。

このように使用するのはfind便利ですが、同時に迷惑なことでもあります。試してみると、その理由がわかります(一致するファイル名に対して1つずつ順番に多くのウィンドウが開くことがわかります)。

find . -type f -name '*red*' -name '*green*' -exec xdg-open {} \;

しかし、一致するファイルを探したい場合*red* または *green*-aの場合、括弧を使用して "and"() および "or"( -o) 演算子の優先順位を指定する必要があります。ただしfind、上記で複数の述語を使用して実行する場合、デフォルトの演算子はaです-a。つまり、述語は論理積で論理的に結合されます。

括弧はシェルで特別な意味を持つため、シェルで解釈されずに find コマンドに渡されるようにバックスラッシュでエスケープする必要があります。

find . -type f \( -name '*red*' -o -name '*green*' \) -exec echo {} +

これを「一般ファイル AND ('*red*' または '*green*' と一致するファイル名)」として読み込みます。

おすすめ記事