There once was a time when I did the following inside my home directory:
$ wget "some-url" -O "output-file.mp4"I clearly remember copying the output file name from a web page. Unfortunately, the copied text has a new line at the beginning of it and I didn’t notice that. That’s because the newline or carriage return characters are control characters and have no visual representation. Anyway, when I listed files inside my home directory I noticed a strange file name on my list:
$ ls
?output-file.mp4I tried the following to remove the file without any success:
$ rm "?output-file.mp4"
rm: ?output-file.mp4: No such file or directory
$ rm \?output-file.mp4
rm: ?output-file.mp4: No such file or directory
$ rm ./?output-file.mp4
rm: ./?output-file.mp4: No such file or directory
$ rm *.mp4
rm: *.mp4: No such file or directoryWhen I tried auto-completion by pressing Tab key a few times on csh it showed the file name as:
output-file.mp4On the other hand bash showed the following name:
^Joutput-file.mp4I tried the above rm command with ^J instead of ? with no luck.
In the next step, I tried:
$ man rmThen I came across -i flag inside rm man page:
-i Request confirmation before attempting to remove each file, regardless of the file’s permissions, or whether or not the stan- dard input device is a terminal. The -i option overrides any previous -f options.
So, I gave rm -i a go after changing to my home directory:
$ cd ~
$ rm -i *
remove
output-file.mp4 ? y
remove some-other-file ? ^CAs it can be seen in the output, rm now considers the file and even prints the newline character in the output. So I entered y and it deleted the file with bad name. For, the other files on the list I simply pressed Ctrl+C to exit the list completely (Note: if Ctrl+C won’t work for you, try Ctrl+Z or Ctrl+D).
I also found an interesting – flag through my journey inside rm man page which may come handy one day:
The rm command uses getopt(3) to parse its arguments, which allows to accept the
--' option which will cause it to stop processing flag options at that point. This will allow the removal of file names that begin with a dash (-’). For example:rm – -filename
The same behavior can be obtained by using an absolute or relative path reference. For example:
rm /home/user/-filename rm ./-filename
See also
- WebRTC IP Leak Demonstration
- How to disable HP Proliant ML350p Gen8 P420i RAID controller, enable HBA mode (a.k.a. pass-through), and perform a FreeBSD root on ZFS installation
- Host Unreal Engine 4 projects on Microsoft Azure DevOPS with unlimited cost-free Git LFS quota
- Gregorian / Jalali (a.k.a. Persian Calendar) Date Conversion in C++ using boost::locale