Celeb Glow
general | March 29, 2026

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\?.mkv

But despite no failure message the file still exists. Any suggestions?

5

4 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?b

One 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^Gb

In 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'
acb

So, if you do rm a?b (or worse, rm a*b), you could end up deleting files you didn't intend to.

1

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*.mkv

lists 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.

1

rm -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 =)

1

Just do an ls -i which shows the inode.

Than do rm $(find . -inum inodeoffile)

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy