メモの日々


2006年03月13日(月) [長年日記]

  • サーバが重い。このtDiaryのせいかも。最近なぜか負荷が高いのだ。

[unix][shell] bashで一度にたくさんのファイル名を変更する

file_1.sample.gif 〜 file_10.sample.gif というファイルのファイル名の .sample 部分を削除したかった。for文を使って、

for file in $(ls *.sample.gif); do mv $file $(echo $file|sed 's/\.sample//'); done

とした。for文て全然覚えられない。

その後ちょっと調べて、sedを使わずに

for file in $(ls *.sample.gif); do mv $file ${file/.sample/}; done

としてもできることを知った(参考:http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbAZ)。

もっと簡単にできるのかな。

(追記)

renameというコマンドがあるのですね。ご指摘ありがとうございます。

(追記2)

lsなんか使わなくてよくて、

for file in *.sample.gif; do mv $file ${file/.sample/}; done

でいいみたい。試してないけど。

やること

  • トイレットペーパー
本日のツッコミ(全2件) [ツッコミを入れる]
takano32 (2006年03月13日(月) 22:17)

Red Hat系のディストリビューションだとrename(1)というものがあり<br>$ rename .sample. . *.sample.gif<br>のようにできるらしいです

TrackBack (2006年03月14日(火) 15:33)

http://taka.no32.tk/diary/20060314.html#p03<br>32nd diary<br>Debianの/usr/bin/renameってどうなってんのかな?<br>bashで一度にたくさんのファイル名を変更する(メモの日々) にコメントしようとし, 確認のためにrename(1)をDebianで使おうと思ったら,使えない. 確かにman 1 renameではRed Hat系のrename(1)と同じ解説が出るですよ. でも,実際には/usr/bin/renameに説明と全然違うPerl..