ファイル名の最大長を求める。UTF-8におけるNTFSとEXT4の運用 ちょっぴりZFS

ファイルシステムの限界を探る::
ファイル名長のバイト数を求める。

4年位まえに書いて公開するのを忘れていました。NTFSとEXT4で長い長いファイル名をどう扱っていけばいいのか?! についての調査研究です。

●ファイルシステム NTFS/EXT4でのファイル名最大数を実際に試して計測した。
●EXT4が意外に少ない結果になった。NTFSの勝ち?! 留意すべき事項。
●ファイル名長大化推進委員会としては由々しきこと。

ファイル名バイト数を求める呪文/Perl OneLiner

$ ls | perl -pe '{ chomp $_ ; my $FILELENGTH=(length) ; print "\n$FILELENGTH\t" }' | sort -n


$ ls | perl -wnE '{ chomp  ; my $FILELENGTH=(length) ; say "\n$FILELENGTH\t$_" }' | sort -n


適当なディレクトリで実行するとバイト数でソートされた結果が出力されます。

たとえば、以下1行を端末にコピペ。

$ cd ; ls | perl -pe '{ chomp ; my $FILELENGTH=(length) ; print "\n$FILELENGTH\t" }' | sort -n

6 公開
9 ビデオ
12 ピクチャ
18 ダウンロード
18 テンプレート
18 デスクトップ
18 ドキュメント
18 ミュージック

インストール直後のubuntu系ホームディレクトリは日本語ディレクトリなので、このようにカウントされます。ロケール LANG=ja_JP.UTF-8 が基本的にどのディストリビューションでもデフォルトの時代ですからね。とりあえずはそれに合わせると。

UTF-8ではワイドキャラクターは3バイト(大半)ですので、日本語文字列が入っている場合でもこれで正解です。いわゆる「全角2文字はx3で、6バイト」です。

但し、ほとんどの人は使いませんが日本人が使う可能性のある文字は4バイトのものもありますので、単純に勘では計算できません。だいたいx3で目安にはなります。追加文字は4バイト以上に割り当てられているというわけです。そこを記憶しておくと暗算できるようになります。(誰がするか)

バイト値で返ってくるのはいろいろと便利です。但し、原稿用紙換算の制限のある文書ではShift_JISの考え方で「文字数カウント」しないと経済社会に対応できませんのでご注意を。縦書き原稿と横書きでは組版の考え方も違いますからね。

無駄な検証::
相互運用を考慮すれば85文字以内に収めるように習慣づける。


さて、ベタに検証してみました::常に数えるわけではないし、ながければ怒られますが、スクリプトなどで処理する場合は注意です。

fuse経由NTFSは、どんな文字(アスキー領域でも、日本語でも)でも255文字分のファイルが作成できます。バイト値で755です。(RAW OSを絡めていえば「最近のWindowsでは」と条件付きになるようです。サポート切れXPなどは関係ないのでどうでもいいです)

以下のファイルはNTFSに作成できます。限界の765バイトにチャレンジしてみました。(三木清先生、青空文庫)すばらしい論考です。ぜひどうぞ。

touch してみるとすぐにわかります。仕様を超えた場合は、怒られますから。

哲學はどう學んでゆくかといふ問は、私のしばしば出會ふ問である。今またここに同じ題が私に與へられた。然るにこの問に答へることは容易ではないのである。これがもし數學や自然科學の場合であるなら、どういふものから入り、どういふ本を、どういふ順序で勉強してゆくべきかを示すことは、或ひはそんなに困難ではないかも知れない。それが哲學においては殆ど不可能に近いところに、哲學の特色があるともいへるであらう。哲學は何であるかの定義さへ、立場によつて異つてゐる。立場の異るに從つて、入口も異る筈である。しかも哲學的知識には、端初

EXT4では以下の例で限界近くになります。253バイトにしかなりませんでした。(夏目漱石、草枕、青空文庫)ちなみに私はこの「草枕」が大好きなんです。

住みにくき世から、住みにくき煩わずらいを引き抜いて、ありがたい世界をまのあたりに写すのが詩である、画えである。あるは音楽と彫刻である。こまかに云いえば写さないでもよい.txt

EXT4では、英数字なら255文字のファイルが作成できますが、「日本語」では不可能です=中国語も同じです。カナダ先住民族文字も不可能ですし、シュメール楔形文字もだめでした。めんどくさいのでファイル名は85文字以内と考えておくのが得策です。85x3は255です。安全な範囲が85文字です。ZFSでも同じようですが現在は仕様拡大したかもしれません。

ですから、バイト数で250以上を危険水域としてファイル名長をチェックしたほうがいいかもしれません。少なくともGnomeでは255バイトぎりぎりのファイルはゴミ箱には入れられません(なんてこったい!!)。拡張子付加とかそれ以上できないためなのかもしれません。リネームは促されません。端末で地味に作業しましょう。

※おまけ、または結論


NTFS上に作成した長大な名前のファイルは、仮想マシン(Windows)では見えませんでした。もちろんWineでは見えています。ファイル名長大化推進委員会の私としては、Linux EXT4の日本語で扱える文字数の少なさにがっかりです。笑)

一律に閾値255バイトで制限したほうがいいのでしょうね。ファイルシステムをまたがる場合、異機種間ネットワークを組む場合、可搬性を考慮した場合など。あー、コンピュータってめんどくさい。

追試::2018年7月24日、同じ結果でした。85文字以内にしないとうまくないのでしょう。

touch: `アル・ジャロウ,ウィリー・ネルソン,ウェイロン・ジェニングス,キム・カーンズ,クインシー・ジョーンズ(プロデューサー及び指揮),ケニー・ロギンス,ケニー・ロジャース,ジェフリー・オズボーン,ジェームス・イングラム,ジャッキー・ジャクソン,シンディ・ローパー,シーラ・E,スティーヴィー・ワンダー,スティーブ・ペリー,スモーキー・ロビンソン,ダイアナ・ロス,ダリル・ホール&ジョン・オーツ,ダン・エイクロイド,ディオンヌ・ワーウィック,ティト・ジャクソン,ティナ・ターナー,ハリー・ベラフォンテ,ヒューイ・ルイス&ザ・ニュース,ビリー・ジョエル,ブルース・スプリングスティーン,ベット・ミドラー,ポインター・シスターズ,ボブ・ゲルドフ,ボブ・ディラン,ポール・サイモン,マイケル・ジャクソン,マーロン・ジャクソン,ライオネル・リッチー,ラトーヤ・ジャクソン,ランディ・ジャクソン,リンジー・バッキンガム,レイ・チャールズ' に touch できません: ファイル名が長すぎます

なので、~/Music/アルバム名/演者/We Are The World.flac の演者の部分がつくれません。いや、作んなくていいから。^^; U.S.A. For Africa でいいんです。

コーラスなどの楽曲で演者を編集、全参加アーティストを列記するという野望が潰えた瞬間です。

Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...