是否可以为OS X上的命令行工具获取全套的Unix选项?


14

我遵循Twitter上的Unix工具提示,有趣的是,其中发布的许多提示在OS X上均不可用。

例如:

cp-您只会在目标目录中复制不存在的文件或比现有文件更新的文件。

在我的机器上尝试这样做会导致:

cp: illegal option -- u
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
   cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory  

为什么这些选项不可用,并且可以在OS X上访问它们?


您也可以使用安装find,sed和awk brew install coreutils findutils gnu-sed gawk。参见apple.stackexchange.com/questions/69223/…
Lri

警告:如果您安装并使用GNU版本的cli工具,则可以获得GNU的扩展名,但同时也失去了OS X版本的工具的扩展名。例如,自制软件的coreutils中的cp命令(命名gcp为避免混淆)不知道如何复制OS X文件可以具有的复杂元数据(扩展的attrs等);因此,如果您使用gcp别名文件,则该副本将缺少关键信息并且将无法使用。
戈登·戴维森

@GordonDavisson感谢您的注意。是添加的.file进入我的所有目录了吗?我认为这可能是一个加分:)
DQdlM 2013年

@KennyPeanuts:您是说.DS_Store文件吗?这是相似的,但不是我在说的(并将gcp -R与其他所有内容一起复制)。如果您的意思是._somefilename,那是一个AppleDouble文件,用于在某些类型的国外卷上存储元数据(我正在谈论的信息),这很复杂...
Gordon Davisson

@GordonDavisson感谢您的澄清。我正在谈论的是这些._somefilename文件。
DQdlM 2013年

Answers:


12

自制软件并安装核心实用程序。然后,您可以查看GNU版本的cp是否支持所需的标志。这是在合作伙伴站点上的一个很好的答案,如果您愿意,我将摘录将cp替换为GNU版本所需的确切步骤:

这里的自制软件- http://mxcl.github.com/homebrew/
这里的很长的故事- /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594#476594


这样的环境的一个例子是[Homebrew](http://mxcl.github.com/homebrew/),例如,它还有GNU sed。安装Homebrew后,您可以输入

brew install coreutils

并安装GNU Coreutils。这些将为您提供seddateprintfwc和许多其他工具与GNU / Linux的,而不是OS X.然而船,以免“覆盖”默认OS X的二进制文件,他们将被作为前缀g默认。因此,在安装Coreutils之后,如果要使用GNU sed,请键入

gsed

如果每次都很难输入,则可以在PATH中添加一个“ gnubin”目录,并使用调用GNU sed sed。您需要将以下内容添加到您的~/.bash_profile

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"


可以使用安装port吗?
Adil Soomro

1
@AdilSoomro macports.org是一个久负盛名的工具。我认为没有理由不尝试它-我只是没有经验,确实会使用并为自制做贡献。
bmike

3

原因是OSX使用BSD命令行工具,而Unix工具提示用户可能正在使用使用GNU命令行工具的Linux。

您可以在OSX上安装GNU工具(在Linux上安装BSD)。

最简单的方法是使用Macports,Homebrew或Fink等软件包管理器

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.