I create a file name :~ on bash shell by accident
scp foo :~
How to delete it?
I create a file name :~ on bash shell by accident
scp foo :~
How to delete it?
try rm ':?' or rm ":?" or rm :\?
mainly you need to quote the file name either with single quotes or double quotes. Or escape any special characters contains in files name.
some special characters I can count are:
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
I suggest to use single quotes to prevent deleting a wrong file named my_file instead of $file with rm $file or rm "$file" when file='my_file'. The single quote character is the only character that you can't quote with single quotes in Bourne-like shells, but you can always quote the rest of the file name with '...' and ' itself as \':
rm -- '-$#~<>'\''"*?[]{}'`
Note that - is not special to the shell, but it's special to rm in that if found at the start of an argument, it's treated as an option. Here the -- tells rm that the arguments that follow are not to be treated as options even if they start with a -.
-i flag just to make sure you're deleting the proper file.
– doneal24
May 29 '18 at 12:07
In general, whenever you want to remove a weirdly-named file, you can try to use the marker -- which denotes the end of options. Anything after that flag is handled as a positional parameter. (See also: What does "--" (double-dash) mean? )
So, that would be
rm -i -- :?
(As suggested by @Doug O'Neal, the -i option prompts you before deletion to make sure you're removing the correct file.)
However, in this case ? will be expanded by the shell as a glob character. So the above won't work.
In this case, you can use the autocomplete feature of the shell. Go into the directory where the weirdly-named file is, then type rm : (without pressing Enter) and then press Tab to cycle through all files in the current directory. The weirdly-named file will appear properly quoted.
-- is a marker for rm, not Bash. And it doesn't do anything to avoid the ? being treated as a glob character.
– ilkkachu
May 29 '18 at 13:27
:~(as in question) or:?(as in title)? – Kusalananda Jun 07 '18 at 07:54