2015/04/28

Ubuntu  remane を使ったファイル名の一括変換 1

写真などを整理するときに大量に名前を書き換えたい場合がある。そんな時には Ubuntu ならスクリプトを書けば一括変換できる。しかし、Linux には rename というコマンドがあり,簡単にファイル名を一括変換できる。(参照:1,2,3)


ここではホームフォルダ内のフォルダ "work" の中に以下の4つのファイルがあるとして,renameコマンドの例を示す。

"42. Protokoll_01_07.pdf"
"43. Protokoll 2 September 2014.pdf"
"44. Protokoll 09 09.pdf"
"45. Protokoll FSMa 16 September.pdf"

0. 元のファイル名

まず、ターミナルを立ち上げる。
次にコマンド cd workで workフォルダ内に移動する。
ここで コマンド ls を入力すると,フォルダ内にどんなファイルがあるか確認出来る。

xxx@yyyy:~$ cd work
xxx@yyyy:~/work$ ls
42. Protokoll_01_07.pdf
43. Protokoll 2 September 2014.pdf
44. Protokoll 09 09.pdf
45. Protokoll FSMa 16 September.pdf
xxx@yyyy:~/work$ 


1-1. 置換  文字 "September" を数字 "9" に変換する


$ sudo rename 's/September/9/' *.pdf

ここで、*.pdf はフォルダ内のすべての PDFファイルという意味。
's/September/9/' で "September" を "9" に置換するという意味。

置換後

42. Protokoll_01_07.pdf
43. Protokoll 2 9 2014.pdf
44. Protokoll 09 09.pdf
45. Protokoll FSMa 16 9.pdf


1-2. 置換  最初の空白をアンダーバー "_" に変換する


$ sudo rename 's/ /_/' *.pdf


空白はそのまま空白にしておけばいい。空白には \s と入力するらしいが、空白でも大丈夫。

置換後

42._Protokoll_01_07.pdf
43._Protokoll 2 9 2014.pdf
44._Protokoll 09 09.pdf
45._Protokoll FSMa 16 9.pdf


1-3. 置換  すべての空白をアンダーバー "_" に変換する。


$ sudo rename 's/ /_/g' *.pdf


上のコマンドとほぼ同じだが,最後に g が入る。これですべての空白が "_" に置換される。

置換後

42._Protokoll_01_07.pdf
43._Protokoll_2_9_2014.pdf
44._Protokoll_09_09.pdf
45._Protokoll_FSMa_16_9.pdf


1-4. 置換  1桁の数字を0をつけて2桁の数字に変換する。(例 2 -> 02)


$ sudo rename 's/\d+/sprintf("%02d", $&)/eg' *.pdf


ここで、\d+ で数字を取得し,その数時が1桁なら sprintf("%02d", $&) を使って十の位に "0" を補う。sprintf("%02d", $&) は文字や数字を返す perl の関数。$& には \d+ で取得した数字が入る。(参照:6)
また、perl の関数 (コマンド) を利用する時には最後に e が入る。(参照:4,5)

置換後

42._Protokoll_01_07.pdf
43._Protokoll_02_09_2014.pdf
44._Protokoll_09_09.pdf
45._Protokoll_FSMa_16_09.pdf


1-5. 置換 大文字を小文字に置換する


$ sudo rename 'y/A-Z/a-z/' *.pdf


文字を置換するときには 'y/before/after/' とする。

置換後

42._protokoll_01_07.pdf
43._protokoll_02_09_2014.pdf
44._protokoll_09_09.pdf
45._protokoll_fsma_16_09.pdf


2-1. 削除  最初のドット "." を削除する。


$ sudo rename 's/.//' *.pdf


単に削除する時には何も書かず,空欄も入れない。

削除後

42_protokoll_01_07.pdf
43_protokoll_02_09_2014.pdf
44_protokoll_09_09.pdf
45_protokoll_fsma_16_09.pdf


3-1. 補完  先頭に文字や数字を補完する


$ sudo rename 's/^/0/' *.pdf


^ でファイル名の先頭を指定している。

補完後

042_protokoll_01_07.pdf
043_protokoll_02_09_2014.pdf
044_protokoll_09_09.pdf
045_protokoll_fsma_16_09.pdf


3-2. 補完  最後(拡張子の前)に文字や数字を補完する


$ sudo rename 's/.pdf/_tokyo.pdf/' *.pdf


拡張子がない場合には 's/$/補完する文字列/' とすればよい。

補完後

042_protokoll_01_07_tokyo.pdf
043_protokoll_02_09_2014_tokyo.pdf
044_protokoll_09_09_tokyo.pdf
045_protokoll_fsma_16_09_tokyo.pdf


3-3. 補完  中間(月とtokyoの間)に数字(年号)を補完する


$ sudo rename 's/(_\d{2})(_tokyo)/$1_2014$2/' *.pdf

文字列をカッコでくくると一つのグループとみなされ,$1 には1番目の、$2 には2番目のグループが対応する。

補完後

042_protokoll_01_07_2014_tokyo.pdf
043_protokoll_02_09_2014_tokyo.pdf
044_protokoll_09_09_2014_tokyo.pdf
045_protokoll_fsma_16_09_2014_tokyo.pdf


4-1. 連番  先頭の3桁の数字を 01 から始まる2桁の連番にする。


$ sudo rename 's/\d{3}/our $i; sprintf("%02d", 1+$i++)/e' *.pdf

our $i; で連番に使う変数を定義し、1+$i++ で 1,2,3, ... となるように指定している。
そして、関数 sprintf で連番が 01, 02, 03, ... となるように指定している。(参照:6,7)

変更後

01_protokoll_01_07_2014_tokyo.pdf
02_protokoll_02_09_2014_tokyo.pdf
03_protokoll_09_09_2014_tokyo.pdf
04_protokoll_fsma_16_09_2014_tokyo.pdf


5-1. 入れ替え  日付が _日_月_年_ となっているので、_日_月_年_ と並べ替える。


$ sudo rename 's/(_\d{2})(_\d{2})(_\d{4})/$3$2$1/' *.pdf 

3-3. の応用例、$1=(_\d{2})、$2=(_\d{2})、$3=(_\d{4}) となっている。

変更後

01_protokoll_2014_07_01_tokyo.pdf
02_protokoll_2014_09_02_tokyo.pdf
03_protokoll_2014_09_09_tokyo.pdf
04_protokoll_fsma_2014_09_16_tokyo.pdf


参照

1. rename command
2. Bulk renaming files in Ubuntu
3. rename
4. Perl 正規表現のクイックスタート (評価修飾子について)
5. Reguläre Ausdrücke (Modifeier について)
6. 関数 sprintf について
7. our $i; について

2015/04/18

EeePC 901  BIOS のアップデート (OS を使わない方法)

 

アップデートのポイント


EeePC 901 の BIOSアップデートは直接 BIOS からアップデートするので簡単で確実だ。ただ、いくつかのポイントがある。

BIOS のダウンロード
EeePC 901 の BIOS をアップデートを解説するホームページは多い。しかし、BIOS のダウンロードのリンク先が切れている。(2015.04.18 現在)現在のダウンロード元は

Driver & Tools, Eee PC 901/Linux, Eee PC, 901 Series.

ファイルをリネームする
ダウンロードして解凍したファイルを [Modelname].ROM とリネームする。例えば EssPC 701SD なら 701SD.ROM、EeePC 901 なら 901.ROM とする。

USBスティックのフォーマットとパーテーションサイズ
BIOS のアップデートにSDカードを使う方法もあるが、USBスティックを使ったほうが簡単。(参照:4) その際

 - ファイル形式ははFAT16
 - パーテーションサイズは100MB前後

で、フォーマットする。USBスティックはファイル形式が FAT32 か、NTFS でフォーマットでされていることが多い。これを FAT16 に変換する。そしてパーテーションサイズを 100MB 前後に設定する。私の場合は 4GB の USBスティックを使って全体を FAT16 にフォーマットしら、

 Reading file "901.rom" _

で止まった。(アップデートは始まっていない。)また、パーテーションサイズを 16~20MB に設定してフォーマットした場合も同様だった。
パーテーションサイズを 100MB にしたら、

 Reading file "901.rom" _

で、一時止まった後,ピープ音がしてアップデートが始まった。

アップデートは中断してはならない。
PCの電源が入れられた後、OS を起動させるのが BIOS の役目だ。だからアップデートを途中で中断すると,OSを起動できなくなり、使用不能になってしまう。(参照:5)

 

アップデート



 1. 最新の BIOS をここからダウンロードする。
 2. ダウンロードしたファイル(ZIP形式)を解凍する。(参照:5)
 3. 解凍したファイル 901-ASUS-2103.ROM を 901.ROM とリネームする。
 4. USBスティックをファイル形式 FAT16, パーテーションサイズを 100MB でフォーマット
  する。(参照:7)  
 5. 901.ROM をフォーマットしたUSBスティックにコピーする。
 6. コピーしたUSBスティックを EeePC 901 に差して電源を入れる。
 7. BIOS が起動したら(ASUS のロゴが出てきたら)すぐに「alt」と「F2」を同時に押す。
 8. すると以下のような画面が出てくる。(出てこないときは電源を切って 6 からやり直す。)


 9. その後ピープ音がして画面 "Completed" と出てくればアップデートが始まる。


 10. 画面に
    The BIOS Update ist finnished.
    Please press power butten to shut down the system.
   と,出てくれば終了。シャットダウンして再起動する。


 12. 再起動すると以下のような画面が出てくるので、「F1」を押す。


 13. 以下のような画面が出て来たら「F10」を押して OS を立ち上げる。



参考


1. Upgrading the BIOS (Firmware) of your Eee
2. ASUS eeePC BIOS-Update unter Linux und Windows
3. Neue BIOS-Updates verfügbar
4. ASUS EeePC
5. Ubuntu  File Roller - ファイルの圧縮、解凍
6. BIOS について
7. HDDをフォーマットする