yutadayo's diary

yutadayo の日記

ファイル名置換

Linuxでファイル名をまとめて変更する
さて以下のようなファイルがあったとします。これらにすべて拡張子 .txt を付けるには下記のようにします。for で繰り返し echo と sed の組み合わせで新しいファイル名を作っているのがポイント。` はシングルクォートではなくバッククォート(shift - @)なので注意

$ ls
apple  banana  lemon
$ for file in *
> do
> mv -i $file `echo $file | sed 's/$/.txt/'`
> done
$ ls
apple.txt  banana.txt  lemon.txt

ちなみに上記コマンドをヒストリで確認すると、下記のように表示されることが分かります。

$ for file in *; do mv -i $file `echo $file | sed 's/$/.txt/'`; done

拡張子 .htm を.html を変更するにはこうします。

$ ls
apple.htm  banana.htm  lemon.htm
$ for file in *; do mv -i $file `echo $file | sed 's/.htm/.html/'`; done
$ ls
apple.html  banana.html  lemon.html

拡張子 .htm を削除するにはこうします。

$ ls
apple.htm  banana.htm  lemon.htm
$ for file in *; do mv -i $file `echo $file | sed 's/.htm//'`; done
$ ls
apple  banana  lemon

先頭に文字を加えたいときはこうします。

$ ls
apple  banana  lemon
$ for file in *; do mv -i $file `echo $file | sed 's/^/20070610-/'`; done
$ ls
20070610-apple  20070610-banana  20070610-lemon

2007を2008に変更するにはこうします。

$ ls
20070610-apple  20070610-banana  20070610-lemon
$ for file in *; do mv -i $file `echo $file | sed 's/2007/2008/'`; done
$ ls
20080610-apple  20080610-banana  20080610-lemon