Quantcast
Channel: Jamyy's Weblog » trouble-shooting
Viewing all articles
Browse latest Browse all 22

避免複製檔案到 FAT32 時發生錯誤

$
0
0

問題: 在 Linux 系統複製檔案到 FAT32 filesystem 發生 Invalid argument 錯誤
原因: FAT32 檔名不得含有 * \ : " < > | ? 等字元
作法:

  1. 使用 pax 指令, 複製時變更非法字元
  2. 使用 mount.posixovl 自動轉換字元

操作環境: Linux Mint 17 (based on Ubuntu 14.04)

建立測試環境

$ mkdir /tmp/src /tmp/fat32 /tmp/fat32-remount
$ dd if=/dev/zero of=/tmp/fat32.img bs=1 seek=500M count=0
$ mkfs.vfat -F32 /tmp/fat32.img
$ sudo mount -o uid=myaccount,rw /tmp/fat32.img /tmp/fat32
$ vi /tmp/go

#!/bin/bash
touch questionmark?
touch less\<
touch more\>
touch backslash\\
touch colon:
touch asterisk\*
touch pipe\|
touch inch\"
touch Abc
touch abC

$ cd /tmp/src
$ sh ../go


 
方式一: 使用 pax 指令, 複製時變更非法字元

$ sudo apt-get install pax
$ cd /tmp/src
$ pax -rw -s '/[*\\:"<>|?]/_/gp' * ../fat32/
$ ls /tmp/{src,fat32}

/tmp/fat32:
Abc  asterisk_  backslash_  colon_  inch_  less_  more_  pipe_  questionmark_

/tmp/src:
abC  asterisk*   colon:  less<  pipe|
Abc  backslash\  inch"   more>  questionmark?


 
方式二: 使用 mount.posixovl 自動轉換字元

$ sudo apt-get install fuse-posixovl
$ mount.posixovl -S /tmp/fat32 /tmp/fat32-remount
$ cp /tmp/src/* /tmp/fat32-remount/
$ ls /tmp/{src,fat32,fat32-remount}

/tmp/fat32:
abC            backslash%(5C)  inch%(22)  more%(3E)  questionmark%(3F)
asterisk%(2A)  colon%(3A)      less%(3C)  pipe%(7C)

/tmp/fat32-remount:
abC  asterisk*  backslash\  colon:  inch"  less<  more>  pipe|  questionmark?

/tmp/src:
abC  asterisk*   colon:  less<  pipe|
Abc  backslash\  inch"   more>  questionmark?

ps. 由於 FAT32 檔名不分大小寫, 所以 Abc 與 abC 只會存在一個


 
Ref:


Viewing all articles
Browse latest Browse all 22

Trending Articles