5

Last night I had a Dovecot server lock up and it corrupted a file in a user's maildir. The file name now has special characters in it and can't be deleted, all command line tools say the file cannot be found, even though it shows up via the LS command.

1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W11473:2,Sc

You can see the special characters in the name such as "Ώ" or "Έ".

I can't seem to find any way to remove this file.

should I do an fsck?

EDIT 1:

I ended up making a new "cur" directory and moved all of the good emails over to it. I renamed the old "cur" directory to "bad cur"

I have tried the following...

sh-3.2# rm -rf badcur
rm: badcur: Directory not empty
sh-3.2# cd badcur
sh-3.2# ls
1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W?11473:2,Sbc
sh-3.2# rm -rf 1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W?11473:2,Sbc
sh-3.2# ls
1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W?11473:2,Sbc
sh-3.2# ls -i
ls: 1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W11473:2,Sbc: No such file or directory
sh-3.2#  
Chris S
  • 77,337
  • 11
  • 120
  • 212
TriadicTech
  • 448
  • 2
  • 5
  • 14

5 Answers5

9

You could try using -i which will present you with a question

rm -i 1386141318.M854059P*
rm: remove regular file '1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W11473:2,Sc'?

and answer y


You may be able to delete the file using it's inode number. use ls -li to get the inode number of the file. Once you have it, use find to delete it

find . -inum <inode number> -delete
user9517
  • 114,104
  • 20
  • 206
  • 289
  • 1
    I tried that, ls will just return `ls: 1386141318.M854059PΈ3Ώ62.email.vantagetitle.com,S?11304,W11473:2,Sbc: No such file or directory` – TriadicTech Jan 08 '14 at 17:55
  • @Potenza: This has worked for me in the past. See my update for using find. – user9517 Jan 08 '14 at 18:05
  • delete by inode usually works when all else fails. – hookenz Jan 08 '14 at 21:39
  • `ls -li` returns `no such file or directory`. As if it sees the file but then decides it doesn't exist. a normal `ls` works fine but doesn't show the inode. – TriadicTech Jan 09 '14 at 20:19
4

The easiest way to tackle these is to use a double-dash (--) following the rm.

# rm -- 1386141318.M854059P*

The double-dash tells the command rm that you are done passing command switches and what follows is what its supposed to operate on.

-Scott

scott--
  • 107
  • 5
  • a double dash ends generally help with file names starting with a - character, so they don't get interpreted as arguments – Matt Jan 08 '14 at 21:41
2

If present, you could browse the directory with Midnight Commander.

Enter mc, use the arrow keys to select the file and then hit F8 to delete it

Mathias R. Jessen
  • 24,907
  • 4
  • 62
  • 95
2

Sounds broken, unmount the file system and run the correct version of fsck for your file system.

Probably fsck.ext3 /dev/sdaN

Run a df . in the directory if you don't know which file system your on.

Run mount if you don't know the correct type of the file system.

Matt
  • 1,537
  • 8
  • 11
  • The way `rm -rf` fails on that particular directory has me absolutely convinced the file system is corrupted. In theory it could be only some cached metadata, which is corrupted, in which case a reboot would fix it. But more likely an fsck is needed. The fsck should not be done with the file system mounted. If it is the root file system, the fsck can be done during boot. Console access may be needed during boot, if an automated fsck fails. – kasperd May 17 '14 at 07:42
0

If you have a GUI available, try using the GUI to delete the file.

I mistakenly tried to tar xvf a Windows ZIP file. It spat out a bunch of errors and then I had this 0 byte file in place of the extracted files, with a crazy long name with question marks representing non-printable characters/values.

I used the standard GUI file browsing tool in Gnome to send the file to the Trash, and then went to the Trash, using the GUI, to permanently delete the file, in case the file could possibly cause any sort of errors by remaining in the Trash.