mv file with illegal character <- twist

Mark Johnston mjohnston at skyweb.ca
Fri Apr 25 06:55:10 PDT 2003


Dave [Hawk-Systems] wrote:
> how about this, rm du and any other commands show an error because the
> filename is a non-printable character...
> 
> ls -laB shows it as
> 
> - l\010\010\010\010
> 
> ideas?

I tried this and wound up deleting it the same way I created it:

rm `echo -e l\\\010\\\010\\\010`

I don't have much shell-fu, so this could probably be done a better
way, but it did the trick.  I'd recommend a more general fix for the
problem, though - maybe something like this:

#!/usr/bin/perl
opendir F, '.';
for $old (readdir(F)) {
        $new = $old;
        $new =~ s/([\x00-\x1f\x7f-\xff])/hex(ord($1))/e;
        rename $old, $new if $old != $new;
}

The shell is a fiddly place to be messing around with unprintables -
if you use an 8-bit clean language that implements rename() or
unlink(), your results will be more predictable.

Mark



More information about the freebsd-isp mailing list