| |
Unix Tip: How-to rename an oddball file
ITworld 02/06/2008
Sandra Henry-Stocker, ITworld.com
Send in your Unix questions today! |
See additional Unix tips and tricks
Every now and then I come across a file that just doesn't display properly in a file listing. In fact, it can be a little tricky to determine the name of a file that contains odd characters. You might think a file's name is "myfile.txt" only to find out that it's really "myfile.txt " (note the extra blanks). Even so, I was a little surprised to see a file listing that looked like this:
-rw-r--r-- 1 root other 180 Nov 30 10:2q
|
In this file listing, part of the timestamp has been obliterated by some unprintable characters in the file's name.
My usual strategy for dealing with oddly named files is to list the file's inode number. After that, I can use the inode number in a file command to remove the file or give it a more well behaved file name. That strategy works well with files that have blanks in their names. In this case, the listing of the file with its inode number looked a little odd too.
To determine whether 15098 was the complete inode number, I could run a find command in the directory like this:
> find . -inum 15098 -print
|
If the find command worked, I could then rename the file with a similar command:
> find . -inum 15098 -exec mv {} newname \;
|
The find command will work but will complain that "./newname and newname are identical".
On the other hand, inode numbers can have six, seven, eight or more digits, so this would only be a guess. I wasn't sure that I wanted to make what might turn out to be hundreds of additional guesses.
Another option is to leave worrying about the actual name of the file to the system. If there aren't too many files in the current directory, you can loop through them and rename the troublemaker when you come to it. This can be useful if you want to look at the file and not simply remove it from the system.
for file in `ls`
do
echo $file
echo -n "rename?> "
read ans
if [ $ans == "y" ]; then
mv $file newname
fi
done
|
If you're really curious about the file's name, unprintable characters and all, you can list your files and pipe the file list to an od command. Since I knew the oddly named file had at least a "q" in it, I narrowed my targets and got this output:
> ls *q* | od -bc
0000000 177 177 161 012
177 177 q \n
|
Use "xc" if you prefer to see the output in hex.
From this output, I could tell that the file's name was backspace backspace q, the 177 being the octal code for the backspace character. How this file came to have such an odd name is still something of a mystery, but at least it now displays normally in my file listings.
Sandra Henry-Stocker has been administering Unix systems
for more than 18 years. She describes herself as "USL"
(Unix as a second language) but remembers enough English
to write books and buy groceries. She
currently works for TeleCommunication Systems, a wireless
communications company, in Annapolis, Maryland, where no
one else necessarily shares any of her opinions. She lives
with her second family on a small farm on Maryland's
Eastern Shore. Send comments and suggestions to bugfarm@gmail.com.
|
|
|