find
正規表現(macOS 14.4.1、Zsh 5.9)でコマンドを使用する方法を理解しようとしています。
note-red.png
note-yellow.png
、、、(およびその他の色)、、、、folder-red.png
(およびその他の色)などのファイルを含むディレクトリがありますが、folder-yellow.png
そのフォルダで次のコマンドを実行すると結果は表示されません。私は何が間違っていましたか?
find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'
答え1
REの構造が間違っています。詳細については、man find
Mac で以下をご覧ください。
-regex pattern
ファイルのフルパスが正規表現を使用するパターンと一致する場合は真です。というファイルを一致させるには./foo/xyzzy
正規表現.*/[xyz]*
orを使用できますが、orは.*/foo/.*
使用できません。xyzzy
/foo/
だからあなたは使用する必要があります-regex '.*/(note|folder)-.*'
。
EREが有効な状態でシフトを使用する必要があるという要件をすでに確認しているので-E
(グループ化構文がからに変更されている\(...\)
)、(...)
OKです。
find -E . -regex '.*/(note|folder)-.*'
note-
またはより正確に一致させるには(またはで始まる中間ディレクトリ名と一致しませんfolder-
)
find -E . -regex '.*/(note|folder)-[^/]*\.png$'
標準テストを使用して両方のパターンを一致させることもできます-name
。
find . \( -name 'note-*.png' -o -name 'folder-*.png' \)
またはそれを使用しているので、zsh
代わりに再帰globを使用してくださいfind
。
print -rC1 -- **/(note|folder)-*.png(ND)
(また、./
パスの接頭辞を避け、ソートされたリストを提供し(修飾子を使用する必要はありませんoN
)、隠しファイルスクリプトを簡単に作成できます(修飾子を削除してD
)、おそらく速度が遅くなる可能性があります。