Fedora:cp:中国語の文字を含むファイルをvfatファイルシステムにコピーするときの無効な引数

Fedora:cp:中国語の文字を含むファイルをvfatファイルシステムにコピーするときの無効な引数

cp漢字のファイルをfat32 Uディスクにコピーするのに使いたいです。これはスクリプトを使用して実行されるため、使用はnautilus私にとって解決策ではありません。このファイルの名前も変更したくありません。エラーが発生しますcp: cannot create regular file '测试.pdf': Invalid argument。 Ubuntuでは、このcpコマンドは完全に機能します。

地域設定:
LANG=en_US.UTF-8 LC_NUMERIC=en_GB.UTF-8 LC_TIME=en_GB.UTF-8 LC_MONETARY=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_MEASUREMENT=en_GB.UTF-8

USBメモリースティックは、次の形式でフォーマットされます。
sudo mkfs.vfat -n $volume_name /dev/$dev_name

次に、マウントディレクトリを作成します。
sudo mkdir /run/media/piotr/$volume_name

次にUSBディスクを取り付けます。
sudo mount /dev/$dev_name /run/media/piotr/$volume_name

ベストアンサー1

いくつかのメタ回答をさせていただきます。

まず、(背景用のみ)FAT32はUTF-8 / UTF-16ファイル名を奇妙な方法で処理します。

おそらくこれは単にインストールオプションです(以下の説明)...もし他のオプションに対処していますが...

ステップ1:インストールオプションを確認してください。

Fedoraでvfatファイルシステムをマウントしようとすると、次のオプションが表示されます。

$ grep vfat /proc/mounts
/dev/loop0 /tmp/tmp.Migr78uZ75 vfat rw,relatime,fmask=0022,dmask=0022,\
  codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0

明らかにiocharset=ascii次善策です。そのオプションで再インストールすると、iocharset=utf8正しいiocharset値が正しく表示されました。

$ grep vfat /proc/mounts
/dev/loop0 /tmp/tmp.Migr78uZ75 vfat rw,relatime,fmask=0022,dmask=0022,\
  codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro 0 0

例:

$ cp 测试.pdf /tmp/tmp.Migr78uZ75/
cp: cannot create regular file '/tmp/tmp.Migr78uZ75/测试.pdf': Invalid argument
$ sudo mount -o loop,iocharset=utf8  ~/vfat.img /tmp/tmp.Migr78uZ75/
$ cp 测试.pdf /tmp/tmp.Migr78uZ75/
$ echo $?
0
$ ls -li /tmp/tmp.Migr78uZ75/
total 0
167 -rwxr-xr-x. 1 root root 0 Sep 25 21:57 测试.pdf

次に、思ったより頻繁にファイルを移動すると問題が発生します。状況の具体的な詳細に応じて、いくつかのバリエーションを使用しました。ここで引用された答え

結論として:

オプション1:参照にファイルを移動します。

ext*ファイルは「inode」番号でファイルシステムに保存されます。-i次にフラグを追加してこの番号を確認/表示できますls

$ ls -i
3312906 测试.pdf

ここでは、inode番号でファイルを参照してfindからmv間接的にコマンドを実行できます。

$ find * -inum 3312906  -exec mv "{}"  /tmp/tmp.Migr78uZ75/  \;

オプション2:奇妙な脱出

findどちらもフィールド分離に()文字をxargs使用できます。これは奇妙な文字を処理する可能性があります。NUL\0

$ find . -inum 3312906 -print0 | xargs -0 -I '{}' mv '{}' /tmp/tmp.Migr78uZ75/

おすすめ記事