If you happen to write to NTFS partitions using non-windows operating systems (such as with ntfs-3g
, see this thread for more info), some of your files may have got written containing invalid characters in their names. When such a thing happen, the fix of chkdsk
is just to delete them but clearly no one would ever want to have their files deleted to 'fix'!
This little script that I wrote aims to fix the invalid NTFS characters in batch and automatically by renaming the files with invalid characters to valid ones. It only fixes the characters in this set: <>:"\|?*
which is pretty enough for most of the problems, but for advanced cases (like reserved names 'com', 'lpt') you must fix manually. Always double check the batch mv
commands before running.
Fallacies:
- Does not fix reserved names in Windows (like CON, PRN, AUX, NUL, COM1, COM2, etc).
- Does not fix other illegal combination of characters like 'directory name cannot end with space or dot', etc.
- Does not fix maximum path length problems.
- To fix invalid directory names you must execute double times: first to fix folders only by using
-type d
param forfind
then to fix files. - It won't escape
'
(single-quote) character in filenames.
# find the files with invalid names and write them to a file
find directory | grep '[<>:"\|?*]' > s-invalid.txt
# fix the file names
cat s-invalid.txt | tr '<>:"\|?*' '_' > s-fix.txt
# prepare the mv commands to execute
paste s-invalid.txt s-fix.txt | awk -F '[\t]' '{print "mv \047"$1"\047 \047"$2"\047"}' > s-cmd.txt
# execute them (double-check before executing)
sh s-cmd.txt
Quickfix for the current directory