私のディレクトリの1つで興味深い点を見つけました。
$ ls -li
total 36
2625309 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Español
2625385 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Español
2625396 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Français
2625406 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Français
$ ls Espa<tab><tab>
Español/ Español/
$ echo Espa* | od -tx1 -c
0000000 45 73 70 61 6e cc 83 6f 6c 20 45 73 70 61 c3 b1
E s p a n 314 203 o l E s p a 303 261
0000020 6f 6c 0a
o l \n
0000023
これらは別のディレクトリです。 inode番号が異なります(最初の列、これが対応する-i
フラグが使用される理由です)。 2つのスペイン語ディレクトリには異なる名前があり、そのうちの1つの名前は次のとおりです。七数値: E
s
p
a
ñ
o
l
。相手の名前は次のとおりです。八数値: E
s
p
a
n
COMBINING TILDE
o
l
。視覚的に、2つのファイル名は区別できず、すべてのソフトウェアで2つのいずれかを作成できます。これCOMBINING TILDE
n
前の文字と同じ「スペース」に印刷されます。
これは実際に数年前にAndroidデバイス(Samsung Note 3)で作成し、ADBを介してLinuxデスクトップにコピーしたメモで、最近まで残りました。これは質問の世界を開きます。
キャラクター組合規制は誰が担当しますか?私はこの責任をファイルを書くプログラム(または驚くべきことにエンドユーザー)に委任することが問題をさらに悪化させるだけだと思います。ファイルシステムの標準化をお勧めしますか?
ファイルシステムの正規化問題を処理するためのツールはありますか?異なる正規化された形式で同じ名前のディレクトリを探し、これらのディレクトリを重複排除してマージするなどの作業は可能ですか? mtimesのように更新せずに、ファイルシステム全体を標準の完全修飾形式でインポートすることもできます。
これらの問題により、どのプログラムがクラッシュする可能性がありますか?問題はない
ncdu
ようですが、find
他のソフトウェアが異なる正規化で同じ名前のディレクトリをうまく処理しないかどうかを知りたいです。たとえば、ソフトウェアの標準化されたファイル名は開いたファイル名とは異なる方法で記録されるため、ユーザーが別のディレクトリに書き込もうとすると、あるディレクトリの内容が上書きされます。私が期待していないことがまたあるのだろうか?