2009-09-29

ファイル名の変換

今回は、ちょっとしたバッチ処理の小技です(備忘録を兼ねて)。

ある仕事のファイルを、lzhアーカイブでもらいました。手元の環境がMacなので、StuffIt Expanderで解凍したところ、解凍されて出てきたファイルが

資料¥sample1.tex
資料¥sample2.tex
...
というように、以前所属していたディレクトリの名前とおぼしき文字列が、すべてのファイル名の先頭についていました。

今回はこれらのファイル名から、先頭の"資料¥"を取り除いて

sample1.tex
sample2.tex
...
としたいわけです。

解決策はいくつもあると思います。今回は C shell (tcsh) & awk でやってみました。

foreach i ( 資料* )
foreach? mv $i echo $i | awk '{sub(/資料¥/,""); print $1}' 
foreach? end
(なお、第2行と第3行の"foreach?"はtcshのプロンプトなので、入力はしません)
こんな風に、ファイル名が"資料"で始まるものをスキャンし、それぞれのファイル名から、先頭の"資料¥"を取り除いた文字列に、ファイル名を変更する作業を行います。

これで、今回の作業は終了・・・かと思いきや、変換後のファイル名をよく見ると、"報告書¥"で始まるファイルがいくつかあります。これらのファイルは「報告書」というサブディレクトリの中に入っていたのでしょうか。

これらに対しては、まず「報告書」に対応するサブディレクトリを作り(今回、名前を"report"としましょう)、そこへ移動します。

mkdir report
mv 報告書* report/
その後、報告書のディレクトリへ移って、上と同じ要領でファイル名を変換しましょう。
cd report/
foreach i ( 報告書* )
foreach? mv $i `echo $i | awk '{sub(/報告書¥/,""); print $1}'`
foreach? end
これでめでたくファイル名の変換が完了です。

今回は、この方法を学んで作業し、記録したので少々時間をとりましたが、バッチ処理だと(処理を正確に組む限り)手作業のような間違いは起こらないし、面倒もないので(これ重要!)、精神的には気持ちよいものです。今後はもっと手早く作業を済ませられるようになるともっとよいのですが・・・

0 件のコメント: