Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

If you create a file on UNIX/linux with special chars, like touch \"la*, you can't remove it with rm "la*. You have to use the inode number(you can if you add the \ before the name, I know, but you'd have to guess as a user that it was used in the file creation).

I checked the manpage for rm, but there's no metion of the inode number. Doing rm inodenumber doesn't work either.

What is the command for this?

share|improve this question
add comment

4 Answers 4

up vote 10 down vote accepted

Some other methods include:

escaping the special chars:

[~]$rm \"la\*

use the find command and only search the current directory. The find command can search for inode numbers, and has a handy -delete switch:

[~]$ls -i
7404301 "la*

[~]$find . -maxdepth 1 -type f -inum 7404301
./"la*

[~]$find . -maxdepth 1 -type f -inum 7404301 -delete
[~]$ls -i
[~]$
share|improve this answer
    
Heh, using find would certainly be easier than my suggestion, I'd never noticed -inum :) –  wrt May 19 '10 at 23:02
    
Find has a lot of great switches to be explored, it's my swiss army knife tool to be quite honest :) –  John T May 19 '10 at 23:05
    
t: oh so true. –  akira May 20 '10 at 6:29
    
Solaris doesn't have the "-delete" of "-maxdepth" options. –  guthrie Feb 1 at 4:24
add comment

While I strongly recommend the "escape the special characters" approach, there's always the clri command when you really want fixable filesystem corruption.

share|improve this answer
add comment

If you really want to do this - and your use case doesn't really look like you need to at all, you might try file system debugging tools. If you're willing to lose everything, that is.

For example, for ext2/3/4 the debugfs command has a "kill_file" option that seems to take an inode. As mentioned in other responses, this will damage your file system, as there will be directory entries pointing to a non-existent file. Running fsck afterwards may be able to repair this. It's unlikely you can do this on a mounted file system.

But I'd strongly recommend you just use appropriate escaping/quoting and delete such files with the regular rm command as mentioned in an earlier response - and use rm -i for extra safety when dealing with filenames containing globbing characters like *

share|improve this answer
add comment

Maybe I'm missing something, but...

rm '"la*'

Anyways, filenames don't have inodes, files do. Trying to remove a file without removing all filenames that point to it will damage your filesystem.

share|improve this answer
    
well, this would only work for the current directory, but it's indeed a valid cause for concern. Stupid that I missed that. Still doesn't remove the file though. –  KdgDev May 19 '10 at 23:01
2  
Of course not. The file is only removed when there are no more filenames pointing to it and no processes holding it open. –  Ignacio Vazquez-Abrams May 19 '10 at 23:03
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.