Unix 工具:如果文件的名称中缺少某些内容会怎样?

Unix 工具:如果文件的名称中缺少某些内容会怎样?

我总是在想:大多数 GNU/Unix 工具都以“减去某物”的形式接受选项,有时后面会跟一个参数。如果你有一个名为“减去某物”的文件会怎么样?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

或者

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

这只是出于好奇;我没有这方面的用例。

答案1

要删除名为 的文件-x,请使用rm -- -x--表示选项结束)或rm ./-x

答案2

在面试中问这种问题是相当常见的。处理带破折号的文件的常用方法是:

$ rm -- -f
$ rm ./-f

答案3

这是 Unix 中的一个常见问题。主要方法是给出文件的完整路径名,这样它前面就不会有破折号:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

一些命令,您可以单独使用破折号(或双破折号)来结束选项。但是,这不一定适用于所有命令,甚至不同系统上的同一命令也不一定适用。

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

答案4

你必须使用

  rm -- <filename>

前任:

  rm -- -f

相关内容