rcmdnk's blog

ローマ字の書き方―大文字と小文字 単行本 – 1990/4

最近WindowsとMacでディレクトリ(フォルダ)名をちょっと整理しようと思って 大文字や小文字も統一したりしようとしたんですが、 なんか上手くいかない所があって、ちょっと調べたら 今更ながらWindowsやMacでは大文字小文字の区別をしないことを知ったので 一応その辺のまとめ。

Sponsored Links

Windows

最近のWindowsでは大概ディスクがNTFSにフォーマットされていると思いますが、 NTFS自体は大文字小文字を区別します。

どのシステムにフォーマットされてるかは各ディスクを 右クリックプロパティで出てくる情報の ファイルシステムの項目にあります。

ただ、通常のWindowsシステムではアプリケーション側で 区別しないようになっています 1

ですので通常はWindowsでは大文字小文字を区別しない、と言う状態です。 ためしにa.txtと言うファイルがあるフォルダにA.txtと言う新規ファイルを 作ろうとすると同じ名前があるからa(1).txtにしますか、的な事を聞かれます。

ただし、2つを区別出来ない(同時には存在できない)のですが、 名前の大文字小文字情報自体は保存されます。

また、全角の文字同士(aとA等)でも区別されません。ただし 全角と半角は区別されるのでa.txtとa.txtは同時に存在できます。

Windowsで区別するにはレジストリーをいじったりすると出来るっぽいですが 2、特にWindowsだとウィルスやらスパイウェアの隠し所に なりやすいので滅多なことではしない方が良いとのこと。

また、Microsoft純正のUnix互換ツール, Windows Services for UNIX (SFU) 3, やWindows Server 4では大文字小文字を区別するオプションがあります。 が、この場合もセキュリティー面からはしない方が良いとのこと。

Mac

Macの場合も通常は区別しません。 初期のファイルシステムはMac OS拡張(HFS+)でこのシステム自体が区別しない様です。 使っているディスクを調べるには調べたいディスクをFinderで選んで 右クリック(2本指クリック)情報を見る または-iで出てくる情報のフォーマットの欄を見ます。

手元にあるMac Book AirだとMac OS拡張(ジャーナリング)となっていて、 このジャーナリングと言うのはファイルシステムの整合性を保護するための技術だそうです 5

MacでディスクをフォーマットするときにMac OS 拡張(大文字/小文字を区別)(HFSX) も選べてこれらを選べば区別するようになります。 NFSとかに使う時はお勧めです 6、ということですが、 メインのディスクではこれらを選ぶとAdobeで問題がある様で 7 取り敢えず必要なければ避けた方が良さそうです。

Mac(HFS+)の場合も大文字ファイルと小文字ファイルは同じ物として扱われて 2つ同時に存在できませんが、その名前の情報自体は保存されます。 全角半角についてもWindowsの場合同様。

Linux

Linuxで良く使われるext3だと大文字小文字は区別されます。 調べるのはコマンドらいからdf -TTypeの項を見ます。

Linuxで区別しないようなシステムを使いたい場合はfat32や ciopfsというのも使える様です 8

Windows/Macで使っていたファイルをLinuxに持ってきて大文字小文字の違いで問題がある場合は この様なそもそも区別しないファイルシステムを使うか、 ファイル名等を全て変換してしまう必要があります 9 10

コマンドライン

タブ補完

通常はタブ補完で大文字小文字を区別する様になっているので、 例えCygwinやMacで区別しないようになっていても 大文字ファイルがある所で小文字を押してタブを押しても補完されません。

区別しないようにするためには~/.inputrc

.inputrc
1
set completion-ignore-case on

を加えます。

現在の状態は

bind -v|grep completion-ignore-case

でonかoffか見れます。

git mv

git mvコマンドを使っている時に今回の話に気付いたわけなんですが、 git mvは、大文字が区別される環境の場合、

$ git mv a.txt A.txt

と言った変換が可能ですが、cygwinやMacで区別されない環境だと このコマンドはA.txtは既に存在している、と言うことでエラーを出します。

従って、この場合ファイル名を大文字にしたい時は一時ファイルb.txt等を介して

$ git mv a.txt b.txt
$ git mv b.txt A.txt

とします。

ちょっと混乱するのがgitコマンドを使わずに変更した場合で、

$ mv a.txt A.txt

として、

$ git add A.txt
$ git status

としても何も変化は見られず、さらにこの状態だと以下のような事が起こります。

$ ls
A.txt
$ git mv A.txt B.txt
fatal: not under version control, source=A.txt, destination=B.txt
$ ls
A.txt
$ git mv a.txt B.txt
$ ls
b.txt

つまり、git上では大文字小文字が区別されるのですが、 addコマンドをした時、既に大文字小文字が違うが同じ名前の物が 登録されていると新たに登録されたり情報が更新されたりはしません。

従ってその後のgitコマンド上でのファイル操作がおかしなことになります。

Dropbox

Dropboxで同期しているファイル名等での大文字小文字変換は 基本的に伝播されないようです。 現在Linux上で動かしている物がないので区別されるシステム上で 変更したらどのように伝播するかは分かりませんが、 Windows/Mac間では伝播しませんでした。

また、ウェブインターフェースでは、Renameしようとすると、 一度は変わった様に見えるのですがリロードすると元に戻ります。

この場合、ウェブ上での表示を変更したい場合はgit mvのとき同様 ローカルでもウェブ上でもいいので、一時ファイルを挟んで変更する必要があります。 この場合、ひとつの端末で

mv a b
mv b A

としてあげれば他の端末にも伝播するのですが、注意として、 この作業を一気にやってしまうと、他の端末に送られる命令が結局 aAになってしまうので、 ちょっと時間を置く必要があります(web及び他の端末でも一回bになる時間が必要)。

実用上あまり問題が無いにしてもちょっとやっかいなので やはり最初からなるべくちゃんと決めて変更が無いようにしたいものです。

まとめ

区別しないとは言っても混乱を避けるために区別されても良いようにすべきだとは 思いますが、一応知っておかないとちょっとした所で思わぬ動きを見せるので 知っておいて損はないかと。

さらに詳しい情報や他のファイルシステムについては Wikipediaにまとまっています 11

Sponsored Links
Sponsored Links

« Alt(Cmd)とControlの交換 OctopressでMac風キーボードのキーを表示をさせるプラグイン »