Can't delete a file with a '?' in the file name
Can't delete a file with a '?' in the file name, it fails to delete with the message 'the file does not exist'.
I've tried through the terminal using
rm -f ./pathtofile\?.mkvBut despite no failure message the file still exists. Any suggestions?
54 Answers
Does the file really have a ? in the filename, or is it a non-printing character that ls shows as a ??
$ touch $'a\ab' 'a?b'
$ ls
a?b a?bOne file has an ASCII BELL character in the name, and the other has a plain old question mark.
Newer versions of ls can show it special characters in a clearer form by default:
$ touch $'b\aa'
$ ls
'b'$'\a''a'ls -q is how older versions of ls show non-printing characters by default. So, if you just do ls in any current version of Ubuntu, you're likely to see just question marks.
Try, instead, one of:
$ ls -b
a?b a\ab
$ printf "%q\n" *
a\?b
$'a\ab'If the output from either of these don't have question marks, then the filename doesn't have question marks.
You can use the output of printf for deleting:
rm a\?b
rm $'a\ab'Or rely on tab completion:
$ rm a<tab>
a?b a^Gb If it shows ^G, then press CtrlV then CtrlG to enter it. Or tell bash to cycle through tab completions:
$ bind tab:menu-complete
$ rm a<tab>
$ rm a\?b<tab>
$ rm a^GbIn either case, using rm a?b could work, but is dangerous. It would match all filenames starting with a, ending in b and having one character in between:
$ touch acb; printf "%q\n" a?b
a\?b
$'a\ab'
acbSo, if you do rm a?b (or worse, rm a*b), you could end up deleting files you didn't intend to.
The ? is most likely another non-ASCII symbol that your terminal program is unable to display so it displays ?. This is easily proven - you can execute touch ?.mkv and rm ?.mkv - both command execute just fine.
Files like that are easily deleted using a GUI file manager.
Alternatively you could try using wildcards. If command:
ls pathtofile\FewLetters*.mkvlists a single file you can safely run:
rm pathtofile\FewLetters*.mkv`.Finally you could try the harder but surer way as described in Can not delete files containing special characters in the file name as pointed by Android Dev above.
1rm -f 'path?.mkv' works for me. Correct me if I'm wrong, but the ' ' does disable the functionality of some special characters such as ? . Sorry for the bad formatting, rplying in speed gotta hurry.
Hope it helps, have a nice day =)
Just do an ls -i which shows the inode.
Than do rm $(find . -inum inodeoffile)