TopLinux > 2014年3月
2014年3月26日

Linuxでファイル名の一括変換を行う方法

March 26,2014 1:55 AM
Tag:[]
Permalink

Linuxでファイル名の一括変換を行う方法を紹介します。

1.問題点

あるディレクトリに次の10ファイル(あるいはそれ以上)があるとします。

aaa.txt
bbb.txt
ccc.txt
ddd.txt
eee.txt
fff.txt
ggg.txt
hhh.txt
iii.txt
jjj.txt

これらのファイルの拡張子をすべて「.html」に変更したいのですが、mvコマンドで1ファイルずつ、

$ mv aaa.txt aaa.html
$ mv bbb.txt bbb.html
   :

とリネームを繰り返すのは面倒です。

ということで、ファイル名の一括変換について紹介します。

2.renameコマンドで一括置換する

Linuxにはrenameコマンドが用意されている場合があるので、利用できる場合はこれで一括変換が可能です。

$ rename .txt .html *

フォーマットは次のとおりです。

$ rename 変更前の文字列 変更後の文字列 対象ファイル

ちなみに私の使っているさくらインターネットには用意されていませんでした。

3.Perlのワンライナーで一括置換する

Perlを使ってファイル名の拡張子を変更する場合、次のようにします。

perl -e 'while(<*.txt>) { ($new = $_) =~ s/txt$/html/; rename $_, $new }'

解説です。

まずwhile文を使って、拡張子".txt"のファイル数分処理を繰り返します。

while(<*.txt>) { ... }

s///演算子を使って拡張子を変換したファイル名を変数$newに保持します。

($new = $_) =~ s/txt$/html/;

最後にPerlのrename()でリネームを実施します。

rename $_, $new

4.bashで一括置換する

bashを使ってファイル名の拡張子を変更する場合、次のようにします。

$ cd 目的のディレクトリ
$ for file in *; do
> mv $file ${file%.txt}.html;
> done

解説です。

${file%.txt}

の部分は、bashの「変数展開」または「変数パラメータ展開」と呼ばれる一種で、変数から値を取り出し、その後方部分が%の直後に記述した文字列と一致した場合、その部分を取り除きます。

つまり、

mv $file ${file%.txt}.html;

の対象がaaa.txtである場合、まず、$fileが"aaa.txt"に置き換えられるので

mv aaa.txt ${file%.txt}.html;

となります。次に、${file%.txt}の部分は、前述の変数展開で"aaa"となるので、

mv aaa.txt aaa.html

となり、最後にmvコマンドが実行されることで、"aaa.txt"が"aaa.html"となります。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3