0

なぜこれがうまくいかないのか、私にはまったくわかりません。ここの他の投稿は、そうすべきであることを示唆しています。_ __orig.png_ __DIFF.pngに一致するすべてのファイルを検索する正規表現が必要です。これは最初のものを見つけます:

find . -type f -regex '.*_____orig\.png'

しかし、これは何も見つかりません:

find . -type f -regex '.*_____(orig|DIFF)\.png'

両方に一致するように正規表現を表現する正しい方法は何ですか? (はい、私は使用できることを知っています-または、はるかに長くて保守しにくいコマンドを使用できます...)

4

2 に答える 2

1

括弧とパイプの両方をエスケープする必要があります。次を使用します。

find . -type f -regex '.*_____\(orig\|DIFF\)\.png'
于 2012-08-19T18:41:50.727 に答える
1

GNU find の -regex はデフォルトで emacs フレーバーを使用しますが、これにはあまり詳しくありません。-regextype で使用される正規表現を変更できます。-regextype posix-extended現在の -regex で動作するはずです。

移植可能な方法は、2 つの -name 演算子を使用することです。

find . -type f \( -name "*_____orig.png" -o -name "*_____DIFF.png" \) -print

または、bash 4.0 以降では、find の代わりに globstar と extglob を使用できます。

shopt -s globstar extglob
for file in ./**/*_____@(orig|DIFF).png; do
    echo "$file"
done
于 2012-08-19T19:27:27.100 に答える