質問: カレントディレクトリ以下を再帰的に検索して(Aのファイル名)のみを、指定したfolderにコピーではなく、移動したいと考えております。その際(Bのファイル名)は除外したいです。 Aファイル名 abcdefjhij_255169069.jpeg Bファイル名 abcdefjhij_255169069_Preview.jpeg テキストエディタの正規表現では下記でうまく動くのですが、macのbashでテストすると正規表現の部分がうまく認識できていないようです。 abcdefjhij_255169069.jpeg `\w+_\d+\.jpeg` 下記で一つ上の階層のb-folderにpngファイルを移動するテストはうまくいきました。 `find -E . -type f -iregex ".+\.png" -exec mv {} ../b-folder \;` ですが正規表現の部分変更、テストするとうまくいきません。 `find -E . -type f -iregex "\w+_\d+\.jpeg" -exec mv {} ../b-folder \;` できれば、カレントディレクトリに作成済みの別ディレクトリに移動(一つ上の階層ではなく)、その時に同じファイル名があった場合は、上書き保存するようにできればと思っております。 宜しくお願い致します。 (追加の文面です。) ご指摘ありがとうございます。表現が曖昧でした申し訳ございません。 試しに `1234.txt` というファイルを作成し試したところ、 `find . -name "1.+4\.txt"` `find . -name "[0-9]{4}\.txt"` `find . -name "1..4\.txt"` はいずれもファイル名が表示されずそのままプロンプトに戻ります。 `find . -name "1*4\.txt"`のみ `1234.txt` というファイルが表示されました。 ご指摘頂いた通り、`\d`は使えません。 結論としては`find . -name "a*j_[0-9]*[^a-z].jpeg"` で`abcdefjhij_255169069.jpeg`が表示できたのですが、量指定子が使えないので仮に`abcdefjhijjjjj_255169069999.jpeg`というファイルでも検索されてしまうので、何か良い解決方法はありますでしょうか。 ファイル名の形式としては、アルファベット(10桁)_数値(9桁).jpegのみファイルを移動したいです。 宜しくお願い致します。
回答: `find -E . -type f -iregex ".*\/[a-j]+_[0-9]+\.jpeg"` でどうでしょうか? findの正規表現は完全一致で | テキトーな備忘録 上記ページを見て知ったのですが、findのregex系オプションは完全一致しないといけないので、パス(この場合`./`)も一致するようにしないといけないようです。