Unix Tip: How-to rename an oddball file
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.
> ls -i *
15098q
|
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.
ITworld.com
Sign up for ITworld's Daily newsletter
Follow ITworld on Twitter @IT_world
On Twitter now
unix
Powered by Twitter
jfruh
Apple syncing patent can't come soon enough
pasmith
New Twitter features borrow from 3rd party clients
Esther Schindler
Open Source Changes the Software Acquisition Process
mikelgan
How to set up continuous podcast play on the new iTunes
David Strom
Five important Windows 7 mobility features
sjvn
Guard your Wi-Fi for your own sake
Sandra Henry-Stocker
Grepping on Whole Words
Sidekick: The Good News & the Bad News
Either way you look at it Microsoft Data Center management did not follow standards or best practices in this failure. In which case it makes me wonder more about the outsourcing of corporate data much less personal data.
- mburton325
Join the conversation here
Quick, practical advice for IT pros. Made fresh daily.
Want to cash in on your IT savvy? Send your tip to tips@itworld.com. If we post it, we'll send you a $25 Amazon e-gift card.













This is very helpful
This is very helpful especially the 177 octal value. We were abel to fix the issue in our production system through this.This is fine as long as the
This is fine as long as the filenames aren't dangerous. What if the filename was foo`rm -rf /`bar.jpg ? When you put it on the command line of mv as an environment variable it may be interpreted and will remove files beginning at root (of course, it will only remove files in directories to which you have write access, but your system will be damaged none the less).So, handle "odd" filenames with care. For example, rename them from perl using the rename function, which doesn't submit the filename for command expansion the way a shell would.