1. ホーム
  2. shell

[解決済み] 複数のパターンのいずれかに一致するファイルを見つけるためにfindを使用する

2022-03-24 22:08:01

質問

あるディレクトリにあるすべてのpythonファイルとhtmlファイルのリストをコマンドで取得しようとしていました。 find Documents -name "*.{py,html}" .

そして、マニュアルページが登場した。

パターン内の中括弧('{}')は、特別なものとはみなされません(つまり、find . -name 'foo{1,2}' は foo{1,2} という名前のファイルにマッチし、foo1 と foo2 というファイルにはマッチしないのです。

これはパイプチェーンの一部なので、実行時にどの拡張子にマッチするかを指定できるようにしたい(ハードコーディングはしない)。 もしfindがどうしてもできないのであれば、perlのワンライナー(または類似のもの)でもかまいません。

編集:最終的に思いついた答えは、いろいろとくだらないことを含んでおり、また少し長いので、次のような形で投稿しました。 回答 を、痒いところに手が届くようにしました。 もし、より良い解決策があれば、遠慮なくそれをハックしてください。

解決方法は?

使用方法 -o は、quot;またはquot;を意味します。

find Documents \( -name "*.py" -o -name "*.html" \)


そのコマンドラインをプログラム的に構築する必要がありますが、それはそう簡単なことではありません。

bash(WindowsではCygwin)をお使いでしょうか? もしそうなら、これができるはずです。

ls **/*.py **/*.html

というように、プログラム的に構築する方が簡単かもしれません。