特殊文字を含むファイル名を外部NTFSボリュームにコピーする

特殊文字を含むファイル名を外部NTFSボリュームにコピーする

Documents and SettingsPuppy LinuxのUSB Liveを使用して、Windows XPシステムのフォルダをNTFS外部ディスクにコピーしようとしています。

名前ファイルにエンコードの問題があります。システムがイタリア語の特殊文字(utf-8の一部)を認識しないため、cpまたはGUIファイルマネージャを使用するとエラーが発生しますinvalid or incomplete multibyte or wide character

名前に特殊文字を含むファイルをNTFSドライブにコピーする方法は?

答え1

ファイル名がNTFSファイルシステムで有効であることは確実ですか?

ファイル名は同じにする必要がありますか?

そうでない場合は、「奇妙な」文字を削除して生活をより簡単にすることができます。

これを行うツールがあります。detox

ファイル名を最初に変更しなくても名前の変更内容を確認できます。

$ detox -n somedir/*

その後、実際に次のようにします。

$ detox somedir/*



別のアプローチは、独自にファイル名をクリーンアップ(「削除」)する方法でNTFSファイルシステムをマウントすることです。

この機能を有効にするインストールオプションがありますwindows_names

~からman ntfs-3g:

  windows_names
              This option prevents files, directories and extended  attributes
              to be created with a name not allowed by windows, either because
              it contains some not  allowed  character  (which  are  the  nine
              characters  "  * / : < > ? \ | and those whose code is less than
              0x20) or because the  last  character  is  a  space  or  a  dot.
              Existing such files can still be read (and renamed).

答え2

rsync は、オプションで、ターゲットファイルシステムに合わせてファイル名を変更できます。マニュアルページから:

--iconv=CONVERT_SPEC

Rsyncはこのオプションを使用して、文字セット間でファイル名を変換できます。 "." に CONVERT_SPEC を使用すると、rsync はロケールを介してデフォルトの文字セットを検索するように指示します。または、--iconv = LOCAL、REMOTEの順序でローカルおよびリモートの文字セットを指定して、実行する変換を完全に指定できます(たとえば、--iconv = utf8、iso88591)。この順序に従うと、ファイルをプッシュまたはプルしてもオプションは変わりません。

努力する

rsync --iconv=. --archive /source /destination 

または、ローカルファイルシステムがISO-8859-1であることを指定します。

rsync --iconv=ISO-8859-1,. --archive /source /destination

2つのドライブをローカルにマウントすると、どのファイルシステムがソースであり、どのファイルシステムがターゲットであるかを決定する方法がわかりません。しかし、これが私にとって効果的です。

答え3

iocharset=utf8インストールオプションに追加してください。

mount -o iocharset=utf8 /dev/sdd1 /mnt/external

これで、MS Windows標準に違反するファイルをNTFSパーティションにコピーできるようになりました。

Windowsの外付けドライブでこれを行うと問題が発生しますchkdskが、ファイルシステムが破損しないように注意することができます。 :-)

関連情報