多数のファイルの名前を変更するが、数字部分はそのままにする

多数のファイルの名前を変更するが、数字部分はそのままにする

次のようなファイルがたくさんあります:

pic100.png
pig102.png
box103a.png
superb103b.png
px103c.png
rotor110 - new.png
ready1323 (yellow car).png
motorhome1036x red circle.png
...

つまり、ファイルには 3 つの部分があることがわかります。

  • 任意の文字列を使用できる接頭辞
  • 「a」、「b」などの接尾辞を含む可能性のある数値。
  • オプションの末尾。常に文字列で、スペースで始まります (例: 「 (yellow car)」、「 red circle」など)。

必要なのはこれです: 1 回の操作で次の操作を実行したいです:

  • プレフィックスを希望のものに変更する
  • 番号と接尾辞(a、b、cなど)がある場合はそれも残します。
  • 結末を取り除く

最初の例を使って、これを次のように変換したいかもしれません

object100.png
object102.png
object103a.png
object103b.png
object103c.png
object110.png
object1323.png
object1036x.png

どうすればいいでしょうか? ご覧のとおり、保持しているのは数字と、ある場合は接尾辞「a、b、c」だけです...

簡単に言うと、コマンドは指定されたディレクトリ内のすべてのファイルで動作する必要があります。

前もって感謝します。

答え1

この種のことを実行する標準的な方法は、sed を使用して新しいファイル名を生成することです。

ls | while read file; do
     new=$( echo $file | sed 's/[^0-9]*\([^ ]*\)[^.]*\(\..*\)*/object\1\2/' )
     mv "$file" "$new"
done

それを実行する前に、コマンドを調べて、目的どおりに動作することを確認し、バックアップを作成する必要があります。

関連情報