在 zsh 中包含破折号的 globbing 文件名中的解析错误
Parse error in globbing filenames containing dashes in zsh
当我在包含目录 - Java Code
的文件夹中 运行 mdls -name kMDItemFSName -name kMDItemDateAdded -raw *
时,出现以下错误:
mdls: unrecognized option `- Java Code'
我该如何解决这个问题?我尝试使用 "*"
,但它根本没有 glob。
问题是因为其中一个目录中的 -
选项。通常命令行标志在 -
之后给出。文件夹名称 -Java Code
被视为它不喜欢的 mdls
命令的标志之一。通常我们通过提供 --
来提供命令行标志分隔符的结尾,shell 意识到不再需要命令行标志。
mdls -name kMDItemFSName -name kMDItemDateAdded -raw -- *
这样,因为我们发出命令行标志已完成的信号,所以应该正确解析包含前导 -
的文件夹名称。
该问题是一个经常发生的问题,可以通过一个简单的 mv
命令简单地重现并创建一个包含 -
的文件,当尝试移动该文件时,该命令会失败。它需要通过 mv --
来修复
大多数 shell 内置命令和 GNU 工具都支持此选项。 POSIX 也推荐这个。从他们的指南之一中看到它。参见 POSIX Utility Conventions - Guideline 10
当我在包含目录 - Java Code
的文件夹中 运行 mdls -name kMDItemFSName -name kMDItemDateAdded -raw *
时,出现以下错误:
mdls: unrecognized option `- Java Code'
我该如何解决这个问题?我尝试使用 "*"
,但它根本没有 glob。
问题是因为其中一个目录中的 -
选项。通常命令行标志在 -
之后给出。文件夹名称 -Java Code
被视为它不喜欢的 mdls
命令的标志之一。通常我们通过提供 --
来提供命令行标志分隔符的结尾,shell 意识到不再需要命令行标志。
mdls -name kMDItemFSName -name kMDItemDateAdded -raw -- *
这样,因为我们发出命令行标志已完成的信号,所以应该正确解析包含前导 -
的文件夹名称。
该问题是一个经常发生的问题,可以通过一个简单的 mv
命令简单地重现并创建一个包含 -
的文件,当尝试移动该文件时,该命令会失败。它需要通过 mv --
大多数 shell 内置命令和 GNU 工具都支持此选项。 POSIX 也推荐这个。从他们的指南之一中看到它。参见 POSIX Utility Conventions - Guideline 10