How to remove files by their inode

Sometimes we have to remove files with weird names, like “-h”. rm -h does not work because the shell sees “-h” as a command option.

Watch Free Movies

So, how can we delete these file? Simple: by it’s inode.

A file’s inode can be found with ls -li or stat.
Every file has an unique inode (big number). The inode is like the user’s UID.

$ ls -li
428316 -rw-r--r-- 1 root root 0 2012-05-31 22:21 -h

The inode is the 6 digits number from the first column of the ls -li output.

Finding a file’s inode with stat:

$ stat -- -h | grep -i inode
Device: 801h/2049d Inode: 428316 Links: 1

Now, I will delete -h by it’s inode with the following command:

find . -inum INODENUMBER -exec rm -i {} +

Type y for yes and n for no, in order to delete the file, or not.

$ find . -inum 428316 -exec rm -i {} +
rm: remove regular empty file `./-h'? y

ls -l
total 0

The -h file can also be deleted with rm – – “-h” . (there is no space between the two minus characters)

$ ls
$ rm -- "-h"

Scroll to Top