I just finish the shell script .
This shell can replace weird characters (such as #$%^@!'"...) in file or directory name by "_"
I spent long time on replacing apostrophe in file/directory name
added: 2012-03-14
the 124th line (/usr/bin/perl -i -e "s#\'#\\'#g" /tmp/rpdir_level$i.tmp) is useless , it's for test and forget to delete it.
Thank you for sharing this script. It is an interesting approach to the problem.
Personally I would avoid letting the Shell see the funny filenames by avoiding the use of Shell Environment Variables and using temporary files instead. Similarly if I really need to use "sed" (not "tr") then I'd compose the "sed" commands in a "sed" file where Shell can't see them.
I have a local problem with commercial software which can create files with any name - including screen control escape sequences and absolutely anything a user can type on a keyboard.
The script to deal with this rationalises the filename before any "old files" cleanup sees the file. It also "corrects" any filenames starting with a hyphen character (for obvious reasons) and deletes any file consisting totally of garbage characters and/or space characters.
The reasoning behind the script is to stop the "old files" cleanup failing or executing dubious "rm" statements by renaming or removing files with dodgy names before running the cleanup.