无法删除终端中的特殊命名文件

Léo*_* 준영 1 rm

有些程序会使我的根目录虚拟文件如

-1
-2
-3
...
-n
Run Code Online (Sandbox Code Playgroud)

我跑得不成功

rm -1
Run Code Online (Sandbox Code Playgroud)

也是

rm "-1"
Run Code Online (Sandbox Code Playgroud)

终端认为-1是选项.

如何删除终端中的文件

Mik*_*nen 7

您可以使用rm ./-1./引用当前目录,并且由于参数不以短划线开头,因此不会将其解释为选项.


tom*_*jen 5

据我记得添加 - 作为命令行上的一个选项将导致rm命令从字面上考虑所有剩余的参数,所以命令

rm -- -1
Run Code Online (Sandbox Code Playgroud)

将删除有趣的命名文件.请注意,您仍然可以使用shellextensions(例如'*'或'?'),因为shell会在命令运行之前展开它们(与DOS不同).

编辑:当我第一次遇到这个问题时,我不知道 - 开关所以我写了一个小的c程序,它将删除与第一个参数相同的文件名.这很容易做到,因为所有 posix操作系统都包含unlink系统调用,该调用使用作为参数给出的名称删除文件(将以下内容转储到终端中):

remove_arg.c << EOF
#include<unistd.h>
int main(int argc, char **argv){
  unlink(argv[1]);
}
EOF
gcc -o remove_arg remove_arg.c
./remove_arg -1
Run Code Online (Sandbox Code Playgroud)

这应该在任何UNIX系统上工作,虽然你可能不得不改变gcccc或者你本地的C编译器的名字命名.