
次のような、常に少なくとも 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