Linuxでファイル名の前後に文字を追加したい時の簡単な方法

ある方に、

「ファイル名の最初に一括でzとつけたいのだけれども、どうしたらよいだろうか?」

と質問されました。

たとえば、

001.jpg 002.jpg 003.jpg 004.jpg

をすべて

z001.jpg z002.jpg z003.jpg z004.jpg

としたいというような時です。

ここで、Linuxではrenameというコマンドを使います。

renameは以下の書式を知っていれば応用が効きます。

rename 's/置換前文字列/置換後文字列/' ファイル名

この、’s/before/after/’はsedでの置換と同じ書式です。sはsubstituteの略です。

でも、今は置換ではなく、文字列を追加したいわけです。

こういう時、Linuxはたいしたもんだなと思うのですが、ファイルの頭は^という特殊文字で表現されます。
そして、ファイルの最後は$で表現されます。(正規表現ですね)

なので、今、ファイル名にzを追加したい時は、

「^をzに置換」してあげると考えるわけです。

したがって、以下のようになります。

rename 's/^/z/' 00*.jpg

もし、ファイル名の最後に.oldをつけたかったら以下のようになります。

rename 's/$/.old/' 00*.jpg

^と$についての知識がちょっとあるだけで、ずいぶん楽になりますね。

Linuxでファイル名の前後に文字を追加したい時の簡単な方法” へのコメント

  1. ピングバック: ファイル名をまとめて変更する [Linux] – Site-Builder.wiki

    • 無事にできたようでよかったです。
      ご丁寧にありがとうございました。

  2. 00*.jpgの部分をワイルドカードにする(元のファイル名に規則性がないため)とうまくいかないのですが、何か良い方法はありませんでしょうか?

    • 鈴木さん

      そのような場合には、ls と パイプを使うとうまくいくかと思います。

      ls * | rename 's/置換前文字列/置換後文字列/'
      

      でいかがでしょうか?

      おせっかいですが、ワイルドカードだと予期せぬファイルまでファイル名が変わってしまう場合があるため、必ずテスト環境で一度試されることをお勧めします。

    • すみません。追伸です。元の投稿を見なおしてひとつ typo に気づきました。
      元の投稿には、/がひとつ足りませんでした。

      誤:rename ‘s/置換前文字列/置換後文字列’
      正:rename ‘s/置換前文字列/置換後文字列/’

      です。失礼いたしました。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください