MACは(Finderを使用するか、「find」または「ls」コマンドを使用して)、名前にアクセント文字を含むいくつかのフォルダにアクセスしようとしています。これらのフォルダのいくつかはMACに完全に表示されますが、一部はそうではありません。私がしたことと私が見つけたものは次のとおりです。
- "lftpミラー"コマンドを使用して、サーバーからSynology NASにフォルダをインポートしました。
- Lftp は、UTF-8 形式のファイル名を処理するように構成されています。
- アクセント付きの文字を含むMACの特定のフォルダにアクセスしようとすると(Finderまたは「ls」または「find」コマンドを使用)、そのフォルダにアクセスできなくなります。
- NASのGUIを使用して、問題のフォルダ名に2つの異なる文字で構成されるアクセント文字があることがわかりました(たとえば、「é」を削除する場合は、まずアクセントを削除してから「e」を削除します)。 。
- 名前に単純なアクセント文字を含むフォルダは大丈夫です。
- このファイルを自分のMACに直接コピーすると(rsyncを使用してフォーマットをUTF-8からUTF-8 MACに変換する)、すべてがうまく機能します。私は変換コマンドを使用する必要はないと思います。ファイルをコピーするだけです(TBC)。
したがって、質問は「簡単」です。ファイルを使用する前にファイルを体系的に変換する必要がありますか、それともより良い方法がありますか?
また、ミラー化されたリモートサーバーのディレクトリにあるファイルを変換したくありません。ミラーコマンドに関する問題を回避するには、名前が変更されたファイルを別の場所にコピーする必要があります。
答え1
私の考えでは、あなたが戦ったと思います。Unicodeの正規化質問がありますが、方法がわかりません。
私の考えでは、rsyncはmacOSの結合文字を破るようですが、lftpはそうではありません。 NASとMacの両方で影響を受けるファイル名の16進ダンプを実行することでこれを確認できます。私のLinuxサーバーの例は次のとおりです。
> ls -l
total 1
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFC Pokémon
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFD Pokémon
> find . -name 'NFC*' | hexdump -C
00000000 2e 2f 4e 46 43 20 50 6f 6b c3 a9 6d 6f 6e 0a |./NFC Pok..mon.|
0000000f
> find . -name 'NFD*' | hexdump -C
00000000 2e 2f 4e 46 44 20 50 6f 6b 65 cc 81 6d 6f 6e 0a |./NFD Poke..mon.|
00000010
NFCファイル名では、「é」はバイトシーケンスで表されますc3 a9
。これはU + 00E9文字(アクセント付きのラテン語小文字E)のUTF-8エンコーディングです。 NFDファイル名では、「é」はバイトシーケンスで表されます65 cc 81
。二つUTF-8文字。65
U + 0065ラテン小文字Eで復号化され、cc 81
U + 0301結合急性記号で復号化されます。
(find
私はシェルがファイル名のエンコードとワイルドカードを処理する方法について迷信的な不信を持っていたので、ここでファイル名を印刷しようとしました。)
それにもかかわらず、この方法を使用して、NASがファイル名をエンコードする方法と、ファイル名をMacに保存するときにファイル名に対して正確に実行されるアクション(または実行されていないアクション)を確認できますrsync
。lftp
いったい何が起きていても、ほとんどの場合はできると思います。おそらくすべてのファイル名を組み合わせて問題を解決しました。私は私のサーバーでこれを反定期的に実行します。
convmv -r -f utf-8 -t utf-8 --nfc /data/AUDIO/Library
注:現在Torrentクライアントにシードされているファイルに対してこれを行うと、破損する可能性があります。私はそれがクライアントに依存していると思います。ファイル名の正確なバイト順序に依存する他のソフトウェアも、再正規化されたファイルを失う可能性があります。