ファイル名をShift-JISからUTF-8へ変換するシェルスクリプト

2008/09/28PC::Linux/BSD

概要

ファイル名のエンコードの変換はconvmvで出来るのだが、必要になるのがShift-JISからUTF-8だけなので毎回入力するのはめんどい*1。と、いうことでカレントディレクトリの配下にある全てのファイルのエンコードをShift-JISからUTF-8へ変換するシェルスクリプトを作ってみた。

*1 : だいたい日本語を含む圧縮ファイルで問題となっている

使い方

ファイル名をShift-JISからUTF-8へ変換したいファイルのあるディレクトリに移動し、sjis2utf8.shを実行するだけです。

オプション

-v, --view
変換を行わずに、変換前後の結果を表示する(convmvで引数なしの場合と同じ)
-V, --version
sjis2utf8.shのバージョン
-h, --help
スクリプトの簡単なマニュアル

インストール

前提として、convmvが適当な方法でインストールされている必要があります*2

  1. sjis2utf8.shをダウンロードし、適当な場所に置く*3
  2. sjis2utf8.shに実行権限を付加する

*2 : Ubuntu 8.04ならapt-get convmv

*3 : /usr/local/binあたりを推奨

ライセンス

GNU GPL v2

更新履歴

Ver1.0 2008/09/28
First Release
Ver1.1 2008/10/05
case-esacで書き直し&ヘルプ部を関数化

ダウンロード

ver1.0
ver1.1

拡張子がアップロードする都合上txtとなっているので、適当な拡張子に変換して下さい。

[Kubuntu] Amarokでメディアの接続/切断機能を利用する

2008/09/21PC::Linux/BSD

KubuntuのAmarokではメディアデバイスの接続や、接続状態の切断を行う機能が備わっていますが、そのままでは利用できません。これらの機能を使えるようにしたときのメモ。

環境

  • Kubuntu 8.04.1 日本語ローカライズド
  • KDE 3.5.9
  • Amarok 1.4.9.1
  • メディアデバイス: iPod shuffle 1G (512MB)

デフォルトの状態

amarok-mount.jpg

Amarokで利用可能なメディアデバイスを物理的に接続後、Amarokで「接続」ボタンを押しても図のようなエラーが発生し、マウント及びAmarokでアクセスすることができません。

Amarokから接続/切断ができるようにするには

/etc/fstabを編集する

[KDE] FAT32ファイルシステムをログイン時に自動マウントするを参考に以下の要件を満たす様に編集します。

  • デバイスはUUIDなりLABELで指定する*1
  • 特定のマウントポイントにマウントできる
  • 一般ユーザが書き込み権限を持つ状態で自由にマウントできる
実装例
  • デバイス: iPod shuffle 1G (512MB)
  • ラベル: KaedePod
  • マウントポイント: /media/ipod

上記の場合/etc/fstabを以下の様に編集します。

# iPod shuffle
#<file system> <mount point> <type> <options>                                  <dump> <pass>
LABEL=KaedePod /media/ipod vfat user,rw,noauto,codepage=932,iocharset=utf8  0  0

Amarokからマウントできるように設定する

amarok-mount2.jpg
Amarokにメディアデバイスを接続した状態で設定ボタン(歯車のアイコン)をクリックし、以下の様に設定を行います。

接続前のコマンド
mount /media/ipod
接続切断後のコマンド
umount /media/ipod

これでAmarokからメディアデバイスの接続/切断が可能となります。

*1 : メディアデバイスがUSB機器などの場合状況によって/dev/sddや、/dev/sdeなどに変わってしまうため

[KDE] FAT32ファイルシステムをログイン時に自動マウントする

2008/09/20PC::Linux/BSD

X41のWindows XP領域とKubuntu領域両方で利用できるストレージとして、FAT32ファイルシステムのパーティションを用意しています。が、Kubuntuから自動マウントさせても所有者がrootとなってしまうため、root以外のユーザが自由にファイル等を書き込むことに制限が生じてしまっています。それを解決したときのメモ。

環境

  • Kubuntu 8.04.1 日本語ローカライズド
  • FAT32共有領域: /dev/sda8
  • マウントポイント: /mnt/fat32

自動マウントできるようになるまで

UUIDを調べる

/etc/fstabで上記のFAT32共有領域を指定するためにUUIDを調べます。
以下は/dev/sda8のUUIDを調べる場合は以下の通り。

$ ls -la /dev/disk/by-uuid | grep sda8

その他、tune2fs, blkid, vol_idなどの方法で調べることが出来るようです。→ubulog: UUIDを調べる方法

/etc/fstabの編集

一般ユーザでも書込権限付きでマウントできるように/dev/sda8を編集する

# /dev/sda8
<file system>        <mount point> <type> <options>                                           <dump> <pass>
UUID=調べたsda8のUUID  /mnt/fat32  vfat user,rw,noauto,exec,codepage=932,iocharset=utf8        0       0

これで、任意のユーザで書込権限付きでマウントするための準備が整いました。

自動マウントする

KDE環境ではログイン時に~/.kde/Autostart/以下に配置したスクリプト等を自動実行してくれるので、ここに以下の様なシェルスクリプトを作成します。

#!/bin/sh
mount /mnt/fat32

シェルスクリプトの名前は自由なので、自分がわかりやすい名前をつけるといいでしょう。*1シェルスクリプトを作成したら実行権限を付けることを忘れないで下さい。

$ chmod 755 ./automount.sh

*1 : ちなみに、かえでは"automount.sh"としています

参考

LinuxにおけるFAT32フォーマットの方法

2008/09/12PC::Linux/BSD

Linuxであっても、リムーバブルメディアの類を利用する場合はFAT/FAT32のフォーマットを行う必要があります*1。その際のメモ。

*1 : 理想を言えば、ジャーナリングを採用したファイルシステム(NTFS/ext3等)を用いたいところである。が、NTFSはMSが詳細仕様を公開していないためにLinuxの読み書きは危険とされており、筆者のようなLinux環境をメインで使用する場合には推奨されない。一方、ext3などのファイルシステムでは世の大半を占めるWindows環境では標準で読み込むことが出来ない。このため、仕方なくFAT32で運用している。MSは仕様を公開しるー。FAT32じゃファイルが壊れやすいんじゃー

環境

OS
Kubuntu 8.04.1 日本語ローカライズド
リムーバブルメディア
SONY POCKETBIT (8GB)*2

POCKETBIT (8GB)の詳細

$ sudo fdisk /dev/sde
コマンド (m でヘルプ): p

Disk /dev/sde: 8119 MB, 8119648256 bytes
250 heads, 62 sectors/track, 1023 cylinders
Units = シリンダ数 of 15500 * 512 = 7936000 bytes
Disk identifier: 0x********

*2 : 容量と値段に惹かれて購入したUSBメモリ。同一の価格で東芝製のものがあったのだが、デザインで選んでしまい今非常に後悔している。その一番の理由が読み書きのパフォーマンスが非常に悪い。せっかくある8GBの領域のほとんどが無駄となってしまっている。ReadyBoost対応を謳っている東芝製ならこんな事にはならなかっただろう(TT) もう二度とSONYのUSBメモリには手を出しません

作ってみる

1. パーティション分割

まずはパーティション分割から。通常、市販のUSBメモリなどを購入した場合は基本パーティションが1つだけあるような状態となっているはずですので、特に問題がない場合はそのまま運用します。

ちなみにWindowsではUSBメモリのパーティションを分割することは出来ませんが、Linuxのfdiskでは通常のディスクと同じように扱うことが可能です。

2. 領域タイプの設定

以下の様な場合を例とする

デバイス Boot      Start         End      Blocks   Id  System
/dev/sde1               1        1023     7928219   83  Linux

fdiskでパーティションを分割したときの新規パーティションの領域タイプは0x83(Linux)となる。このため、今回の様にFAT32でフォーマットし運用する場合はこの領域タイプを変更する必要がある。

FAT32を表す領域タイプとして0x0B(FAT32)、0x0C(FAT32 (LBA))がある。これらの使い分けは以下の通り。

0x0B (FAT32)
パーティションの終了シリンダが1023、ディスクの先頭から8GBまでの領域にパーティションが収まる場合に利用してもよい。
0x0C (FAT32 (LBA))
LBA対応版。パーティションが終了シリンダが1023を超える場合にこちらを利用する。

3. フォーマット

実際にmkfsコマンドを利用してフォーマットする。

$ sudo mkfs.vfat -v -c -F 32 /dev/sde1

後はまったりとフォーマットが完了するまで待つだけです。

オプションの解説
-v
詳細な進捗を表示
-c
不良ブロックの精査を行う
-F 32
FAT32形式でのフォーマットの指定。-FだとFAT(16)となる。

参考