macのfindコマンド利用と正規表現での移動処理について。
カレントディレクトリ以下を再帰的に検索して(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のみファイルを移動したいです。
宜しくお願い致します。