当前位置: 首页>>技术教程>>正文


如何使用以破折号 “-” 开头的文件名作为命令参数?

, ,

问题描述

这可能是一个简单的问题,但如何在命令行程序中使用以 “-” 开头的文件?

例如,我试图在名为 -2013-01-01.pdf 的文件上使用 pdfgrep,但它抱怨说没有为 2、0、1、3 等定义的选项。

将文件名更改为不以 “-” 开头的名称可以解决问题,但这不是一个选项,因为这些文件不是我创建的。我只是想检查我知道即将发生的特定变化。

最佳办法

-- 经常用在 命令行 上,以向程序发出信号,表明不再使用可用的命令开关。如果文件包含破折号,程序会尝试将其解释为选项,这将特别有用。

  1. 没有 -- ,会产生一个错误:

    \n

    $ pdfgrep -i posix -find.pdf -xorg.pdf\n\npdfgrep: invalid option -- 'f'\npdfgrep: invalid option -- 'd'\npdfgrep: invalid option -- '.'\npdfgrep: invalid option -- 'p'\npdfgrep: invalid option -- 'd'\npdfgrep: invalid option -- 'f'\n
  2. 使用 -- 我们有一个成功的命令:

    \n

    $ pdfgrep -i posix -- -find.pdf -xorg.pdf\n\n-find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n
  3. pdfgrep 被编程为理解 -- 意味着以下 命令行 参数不是选项。大多数程序都这样做,但并非所有程序都能理解 -- 。对于不支持的程序,解决方案是在文件名前加上 ./ ,如下所示:

    \n

     pdfgrep -i posix ./-find.pdf ./-xorg.pdf\n

    \n

    这应该适用于任何命令,除非由于某种原因该命令不能接受路径,只能接受纯文件名。

有关 命令行 的一般介绍,请参阅 this useful PDF

次佳办法

您在文件名前加上 ./(或其他有效的相对或绝对路径)。\n这样它是可移植的。

例子:

for zefile in ./*.tmp
do
   rm -f "$zefile"
done

使用 -- 来指示选项结束并不总是可用。有些命令会知道,有些则不会。这将在不同的系统中发生变化。所以最后,它的便携性较差。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13363.html,未经允许,请勿转载。