エンコードの問題により、同じファイルのファイル名が異なります。

エンコードの問題により、同じファイルのファイル名が異なります。

バックアップをソースと比較して、データが正しいことを手動で確認する予定です。一部の文字(例:åäö)は生データに正しく表示されませんが、クライアント(Sambaを介して)がそれを正しく解釈しても心配する必要はありません。バックアップから復元されたデータは文字を正しく表示し、diffで同じファイル(diffはあるがまったく異なるファイル)とは思わないようにしました。

md5 と、同じファイルですが名前が異なります。

# md5sum /original/iStock_000003637083Large-barn*
e37c34968dd145a0e25692e1cb7fbdb1  /original/iStock_000003637083Large-barn p? strand.jpg

# md5sum /frombackup/iStock_000003637083Large-barn*
e37c34968dd145a0e25692e1cb7fbdb1  /frombackup/iStock_000003637083Large-barn på strand.jpg

マウントオプションとファイルシステム

/dev/sdb1 on /original type ext4 (rw,noatime,errors=remount-ro)
/dev/sdc1 on /frombackup type ext4 (rw)

ロケール

LANG=sv_SE.UTF-8
LANGUAGE=
LC_CTYPE="sv_SE.UTF-8"
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_COLLATE="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_MESSAGES="sv_SE.UTF-8"
LC_PAPER="sv_SE.UTF-8"
LC_NAME="sv_SE.UTF-8"
LC_ADDRESS="sv_SE.UTF-8"
LC_TELEPHONE="sv_SE.UTF-8"
LC_MEASUREMENT="sv_SE.UTF-8"
LC_IDENTIFICATION="sv_SE.UTF-8"
LC_ALL=

OD-C

# ls "/original/iStock_000003637083Large-barn p� strand.jpg" | od -c
0000000   /   v   a   r   /   w   w   w   /   m   e   d   i   a   b   a
0000020   n   k   e   n   _   i   m   a   g   e   s   /   k   u   n   d
0000040   i   d   8   0   /   _   B   a   r   n   /   i   S   t   o   c
0000060   k   _   0   0   0   0   0   3   6   3   7   0   8   3   L   a
0000100   r   g   e   -   b   a   r   n       p 345       s   t   r   a
0000120   n   d   .   j   p   g  \n
0000127


# ls "/frombackup/iStock_000003637083Large-barn på strand.jpg" | od -c
0000000   /   d   a   t   a   /   v   a   r   /   w   w   w   /   m   e
0000020   d   i   a   b   a   n   k   e   n   _   i   m   a   g   e   s
0000040   /   k   u   n   d   i   d   8   0   /   _   B   a   r   n   /
0000060   i   S   t   o   c   k   _   0   0   0   0   0   3   6   3   7
0000100   0   8   3   L   a   r   g   e   -   b   a   r   n       p 303
0000120 245       s   t   r   a   n   d   .   j   p   g  \n
0000135

答え1

Unixファイルシステムは、ファイル名がバイトで構成されているため、ロケールに依存しない傾向があり、そのバイトがASCIIの範囲外の場合、その意味を決定するのはアプリケーションによって異なります。今日のUnixの慣例は、UTF-8を使用して、いくつかのレガシー環境(主にアジア環境)を除いて、ファイル名やその他すべてをエンコードすることです。一方、Windowsファイルシステムはファイルシステムプロパティにエンコードされている傾向があります。

別の方法でエンコードされたファイル名を使用する必要がある場合は、次のコマンドを使用してそのファイルシステムの翻訳ビューを作成します。ファイルシステム変換。バラより SSHで異なるエンコードされたファイル名を使用する

元のシステムには、latin-1でエンコードされたファイル名があるようです。現在のシステムはUTF-8を使用しており、ålatin-1()で表されるシングルバイトシーケンスは、として印刷された\345UTF-8の無効なシーケンスです。バックアップ処理のため、ファイル名はUTF-8でエンコードされます。 Samba は設定に従ってファイル名を変換します。ls?

デフォルトのエンコードを使用して元のファイルにアクセスするには、再エンコードされたビューを作成します。

mkdir /original-recoded
convmvfs -o icharset=LATIN1,ocharset=UTF8 /original /original-recoded
diff -r /original-recoded /frombackup

(持ちたい権限と所有権によっては、他のオプションが必要になる場合があります。)

答え2

Unix / Linuxでは、ファイル名には'\0'(ASCII NUL)および'/'(スラッシュ、ディレクトリ区切り文字)を除く任意の文字を含めることができます。特に、奇妙なエンコーディングで漢字でファイル名を指定するには、続行してください。横説説や他の命令が見えるかもしれませんが、ls(1)悪いことは起こりません。以下は、「不明/非ASCII文字」の一般的なショートカットですp?'?'

両方のファイル名を実行して、od -c次のようにします。例:

ls /the/dir/offending/fi* | od -c

(globは無関係な名前をフィルタリングし、好みに合わせて調整することです)。

出力が異なる場合にのみ心配され始めます。しかし、Svedishの設定を考えると、正しい名前はおそらく他の名前は前の設定から残ったLatin-4の名前です。

関連情報