ファイルを削除するためのコマンドライン正規表現タイプ

ファイルを削除するためのコマンドライン正規表現タイプ

次のような、常に少なくとも 5 つの数値で始まる一連のファイルがあります。

85966_88.jpg

この答えを使って私は学びましたコマンドで find と regextype を使用して次のようにファイルを削除します。

find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;

私は自分のニーズに合わせてこのコマンドを次のように変更しました。

find . -regextype posix-extended -iregex './[0-9]{5}' -execdir bash -c '[[ ${1##./} > 000001 ]] && echo $1' "removing: " {} \;

コマンドを実行してもファイルは削除されません。最初の5桁に数値があり、その後に_があるすべての.jpgを削除する方法がわかりません。

答え1

まず、コマンド書かれている通り何も削除しません: リンクした回答に記載されているとおり

コマンドでこれをテストしecho、正しいファイルがリストされていることを確認したら、rm代わりに を使用します。

第二に、あなたのケースでは、削除を一致の範囲またはサブセットに制限したくないので、それは複雑すぎます(したがって、シェルテストのものは必要ありません)。次のようにすれば、簡単にできます。

find -regextype egrep -regex '.*/[0-9]{5}_.*\.jpg' -print

(テスト)正しく動作していることが確認できたら、-printに置き換えます。-delete

しかし、正規表現でさえ複雑すぎるように思えます - 単純なグロブ一致は実際には入力が少なくなります。

find -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print

(この場合も、確信がある場合-printは に置き換えてください)。-delete

再帰的に検索する必要がない場合は、単純なシェル glob が機能するはずです。

rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg

関連情報