如何对包含“-”(如“-78059735”)的目录使用 shell 命令?

如何对包含“-”(如“-78059735”)的目录使用 shell 命令?

我有一个外部程序,它生成带有负整数字符串的目录。我正在尝试使用基本的 shell 命令,包括cdls目录,例如:

cd -78059735

可以理解的是,这会失败,因为这看起来像以 -7 开头的命令行选项。

-bash: cd: -7: 无效选项

同样,这些变体也会失败:

cd "-78059735"
cd "\-78059735"
cd '-78059735'
cd '\-78059735'
cd \-78059735

如何通过 shell 与这个麻烦的目录进行交互?

答案1

这是因为该命令cd将后跟的字符视为-有效的选项标志以使其起作用。由于7它不是有效的,因为cd它因您看到的错误而失败。

在这种情况下,您可以通过在命令名称前添加双破折号来指定命令行选项的结尾,--如下所示。下面的命令意味着命令行选项cd是完整的,并且有之后预期的其他标志--

cd -- -78059735/

您甚至可以在之前提供其他标志,--这样就可以正常工作。下面的命令mkdir需要一个选项-p来创建一个目录,如果它之前不存在,则可以很好地处理具有 的字符串-,前提是您在之后给出命令行选项标志的结束-p

mkdir -p -- /tmp/-78059735
ls -d /tmp/*
/tmp/-78059735

rm删除目录的命令也可以正常工作,如下所示

rm -vrf -- /tmp/-78059735
removed directory '/tmp/-78059735'

答案2

cd ./-78059735
ls ./-78059735

这个对我有用。

相关内容