Abstract ======== This is a filesystem client use the FUSE(Filesystem in USErspace) interface to convert file name from one charset to another. Motivation ========== Convmv(http://osx.freshmeat.net/projects/convmv/)is a utility to converts filenames (not file content), directories, and even whole filesystems to a different encoding. Inspired by this tool, born was the convmvfs which mirror a whole filesystem tree from one charset to another. For example, in China there's a National Standard called GB2312 which defined a charset to present most of the Chinese character. And many ftp client used in China only accept and show filename in GB2312. But in *nix world i18n is more acceptable than l10n so many *nix server use UTF-8. For example, there's a linux hosted box run a ftp server app on it. The ftp server export /ftp/pub to anonymous access in which all filenames are in UTF-8 charset. Now we can make a directory called /ftp/pub_gb2312 and use our convmvfs tool to mount a special fuse filesystem on /ftp/pub_gb2312, which hotly convert the filename in /ftp/pub from UTF-8 to GB2312 but leave the contant unchanged. Install ======= First you need to download FUSE 2.5 or later from: http://fuse.sourceforge.net After installing FUSE, compile convmvfs the usual way: ./configure make make install (as root) And you are ready to go.You can now type 'convmvfs --help" to get help infomation. If checking out from CVS for the first time also do 'autoreconf -iv' before doing './configure'. How to use ========== Once convmvfs is installed running it is very simple: usage: convmvfs mountpoint [options] general options: -o opt,[opt...] mount options -h --help print help -V --version print version FUSE options: -d -o debug enable debug output (implies -f) -f foreground operation -s disable multi-threaded operation -o allow_other allow access to other users -o allow_root allow access to root -o nonempty allow mounts over non-empty file/dir -o default_permissions enable permission checking by kernel -o fsname=NAME set filesystem name -o large_read issue large read requests (2.4 only) -o max_read=N set maximum size of read requests -o hard_remove immediate removal (don't hide files) -o use_ino let filesystem set inode numbers -o readdir_ino try to fill in d_ino in readdir -o direct_io use direct I/O -o kernel_cache cache files in kernel -o umask=M set file permissions (octal) -o uid=N set file owner -o gid=N set file group -o entry_timeout=T cache timeout for names (1.0s) -o negative_timeout=T cache timeout for deleted names (0.0s) -o attr_timeout=T cache timeout for attributes (1.0s) CONVMVFS options: -o srcdir=PATH which directory to convert -o icharset=CHARSET charset used in srcdir -o ocharset=CHARSET charset used in mounted filesystem Note: * If you use normal user to mount file system be sure to have r/w permision to /dev/fuse. * use `iconv --list` to see which charsets are supported. * to allow other user to access the mount point use allow_other option * IMPORTANT: if mount point and srcdir was the same dir, readdir oper would enter dead loop. BE SURE TO AVOID THIS SITUATION! Sample use: * to mount $convmvfs /ftp/pub_gbk -o srcdir=/ftp/pub, icharset=utf8,ocharset=gbk * to umount $fusermount -u /ftp/pub_gbk