2013年7月17日水曜日

for, mv, echo, sedを使って複数のファイル名変更

やりたかったこと:

月別にまとめられたデータファイルの名前をMATLABで解析しやすいようにBASHスクリプトで変更する。手動で「名前の変更」をしていたら数にきりがないので。

やったこと:

残念ながらコード一つで、とはいかなかったが比較的簡単なコードを使って名前の変換することに成功。

以下手順&結果(「$」は自分が打ったコマンド):

$ ls

LABSEA_1d_00010101_00010131_diad_T.nc LABSEA_1d_00010701_00010731_diad_T.nc
LABSEA_1d_00010101_00010131_ptrc_T.nc LABSEA_1d_00010701_00010731_ptrc_T.nc
LABSEA_1d_00010201_00010228_diad_T.nc LABSEA_1d_00010801_00010831_diad_T.nc
LABSEA_1d_00010201_00010228_ptrc_T.nc LABSEA_1d_00010801_00010831_ptrc_T.nc
LABSEA_1d_00010301_00010331_diad_T.nc LABSEA_1d_00010901_00010930_diad_T.nc
LABSEA_1d_00010301_00010331_ptrc_T.nc LABSEA_1d_00010901_00010930_ptrc_T.nc
LABSEA_1d_00010401_00010430_diad_T.nc LABSEA_1d_00011001_00011031_diad_T.nc
LABSEA_1d_00010401_00010430_ptrc_T.nc LABSEA_1d_00011001_00011031_ptrc_T.nc
LABSEA_1d_00010501_00010531_diad_T.nc LABSEA_1d_00011101_00011130_diad_T.nc
LABSEA_1d_00010501_00010531_ptrc_T.nc LABSEA_1d_00011101_00011130_ptrc_T.nc
LABSEA_1d_00010601_00010630_diad_T.nc LABSEA_1d_00011201_00011231_diad_T.nc
LABSEA_1d_00010601_00010630_ptrc_T.nc LABSEA_1d_00011201_00011231_ptrc_T.nc

$ for it in *.nc; do mv ${it} `echo ${it} | sed 's/*_1d_*_0001/daily/'`;done

$ ls

LABSEA_1d_00010101_00010131_diad_T.nc LABSEA_1d_00010701_00010731_diad_T.nc
LABSEA_1d_00010101_00010131_ptrc_T.nc LABSEA_1d_00010701_00010731_ptrc_T.nc
LABSEA_1d_00010201_00010228_diad_T.nc LABSEA_1d_00010801_00010831_diad_T.nc
LABSEA_1d_00010201_00010228_ptrc_T.nc LABSEA_1d_00010801_00010831_ptrc_T.nc
LABSEA_1d_00010301_00010331_diad_T.nc LABSEA_1d_00010901_00010930_diad_T.nc
LABSEA_1d_00010301_00010331_ptrc_T.nc LABSEA_1d_00010901_00010930_ptrc_T.nc
LABSEA_1d_00010401_00010430_diad_T.nc LABSEA_1d_00011001_00011031_diad_T.nc
LABSEA_1d_00010401_00010430_ptrc_T.nc LABSEA_1d_00011001_00011031_ptrc_T.nc
LABSEA_1d_00010501_00010531_diad_T.nc LABSEA_1d_00011101_00011130_diad_T.nc
LABSEA_1d_00010501_00010531_ptrc_T.nc LABSEA_1d_00011101_00011130_ptrc_T.nc
LABSEA_1d_00010601_00010630_diad_T.nc LABSEA_1d_00011201_00011231_diad_T.nc
LABSEA_1d_00010601_00010630_ptrc_T.nc LABSEA_1d_00011201_00011231_ptrc_T.nc

$ for it in *.nc; do mv ${it} `echo ${it} | sed 's/LABSEA_1d_0001...._0001/daily/'`;done

$ ls

daily0131_diad_T.nc daily0531_diad_T.nc daily0930_diad_T.nc
daily0131_ptrc_T.nc daily0531_ptrc_T.nc daily0930_ptrc_T.nc
daily0228_diad_T.nc daily0630_diad_T.nc daily1031_diad_T.nc
daily0228_ptrc_T.nc daily0630_ptrc_T.nc daily1031_ptrc_T.nc
daily0331_diad_T.nc daily0731_diad_T.nc daily1130_diad_T.nc
daily0331_ptrc_T.nc daily0731_ptrc_T.nc daily1130_ptrc_T.nc
daily0430_diad_T.nc daily0831_diad_T.nc daily1231_diad_T.nc
daily0430_ptrc_T.nc daily0831_ptrc_T.nc daily1231_ptrc_T.nc
haqq:8 hakase$ ls
daily0131_diad_T.nc daily0531_diad_T.nc daily0930_diad_T.nc
daily0131_ptrc_T.nc daily0531_ptrc_T.nc daily0930_ptrc_T.nc
daily0228_diad_T.nc daily0630_diad_T.nc daily1031_diad_T.nc
daily0228_ptrc_T.nc daily0630_ptrc_T.nc daily1031_ptrc_T.nc
daily0331_diad_T.nc daily0731_diad_T.nc daily1130_diad_T.nc
daily0331_ptrc_T.nc daily0731_ptrc_T.nc daily1130_ptrc_T.nc
daily0430_diad_T.nc daily0831_diad_T.nc daily1231_diad_T.nc
daily0430_ptrc_T.nc daily0831_ptrc_T.nc daily1231_ptrc_T.nc

$ for it in daily*; do mv ${it} `echo ${it} | sed 's/[0-9][0-9]//2'`;done

$ ls

daily01_diad_T.nc daily05_diad_T.nc daily09_diad_T.nc
daily01_ptrc_T.nc daily05_ptrc_T.nc daily09_ptrc_T.nc
daily02_diad_T.nc daily06_diad_T.nc daily10_diad_T.nc
daily02_ptrc_T.nc daily06_ptrc_T.nc daily10_ptrc_T.nc
daily03_diad_T.nc daily07_diad_T.nc daily11_diad_T.nc
daily03_ptrc_T.nc daily07_ptrc_T.nc daily11_ptrc_T.nc
daily04_diad_T.nc daily08_diad_T.nc daily12_diad_T.nc
daily04_ptrc_T.nc daily08_ptrc_T.nc daily12_ptrc_T.nc

$ for it in daily*; do mv ${it} `echo ${it} | sed 's/y0/y/'`;done

$ ls

daily10_diad_T.nc daily2_diad_T.nc daily6_diad_T.nc
daily10_ptrc_T.nc daily2_ptrc_T.nc daily6_ptrc_T.nc
daily11_diad_T.nc daily3_diad_T.nc daily7_diad_T.nc
daily11_ptrc_T.nc daily3_ptrc_T.nc daily7_ptrc_T.nc
daily12_diad_T.nc daily4_diad_T.nc daily8_diad_T.nc
daily12_ptrc_T.nc daily4_ptrc_T.nc daily8_ptrc_T.nc
daily1_diad_T.nc daily5_diad_T.nc daily9_diad_T.nc
daily1_ptrc_T.nc daily5_ptrc_T.nc daily9_ptrc_T.nc

参考にしたサイト

変数内で使える#,##,%,%%の意味(今回は使わなかったけど便利なので)

0 件のコメント:

コメントを投稿