14

我是一个重度命令行用户,并find在我的构建系统脚本中广泛使用该命令。但是在 Mac OS X 上,当我不专心时,我经常会得到这样的输出:

$ find -name \*.plist
find: illegal option -- n
find: illegal option -- a
find: illegal option -- m
find: illegal option -- e
find: *.plist: No such file or directory

基本上,我忘了添加小点:

$ find . -name \*.plist

因为 BSDfind需要路径而 GNUfind不需要(如果您不指定,它假定当前目录)。我经常同时使用 Linux、Mac OS X 和 Cygwin,所以让我的所有工具的行为都相同对我来说是非常有益的。如果我忘记了,我尝试编写一个find添加“./”的 bash 函数,但我失败了。谢谢你的帮助。:)

4

7 回答 7

20

改为安装 GNU find。

$ brew install findutils
$ alias find=gfind

是的,它有效!

于 2013-02-21T13:26:58.937 回答
11

如果您不能训练自己find“正确”使用,那么为什么不在系统命令之前将 GNU find(来自findutils)安装在 PATH 上的目录中。find

如果列表中的最后一项不是目录,我曾经有我自己的私有变体会cp将文件复制到当前目录。我将它保存在我的个人bin目录中多年 - 但最终因为我不再使用该功能而将其删除。(我的 'cp.sh' 写于 1987 年,并在 1990 年和 1997 年进行了两次编辑,作为版本控制系统符号更改的一部分。我想我在 1998 年左右删除了它。脚本的主要问题cp file1 file2是在复制之间模棱两可一个文件覆盖另一个文件并将两个文件复制到当前目录。)

考虑编写自己的包装器find

#!/bin/sh
[ ! -d "$1" ] && set -- . "$@"
exec /usr/bin/find "$@"

第二行说“如果参数 1 不是目录,则调整命令行参数以在命令的其余部分之前包含点。如果您输入以下内容,那将令人困惑:

~/bin/find /non-existent/directory -name '*.plist' -print

因为不存在的目录不是目录,并且脚本会在命令行中添加点——这就是我停止使用私有cp命令的原因。

于 2008-10-12T00:14:57.733 回答
6

如果您必须将其称为“查找”,那么您需要:

alias find=/usr/bin/find\ .

在您的 .profile 或 .bash_profile 或……中。替换 Mac OSX 上的真实路径(如果不是 /usr/bin/find)。输入完整路径以避免循环(bash 通常会alias find=find毫无问题地解释,但最好确定)。

但是你最好不要命名别名find(findl、myfind 等),因为如果你在另一个系统上尝试它会成为你的习惯和麻烦。

于 2008-10-11T22:41:40.497 回答
4
find ./ -name "*.plist"

编辑:嗯,我可能误解了这个问题!如果你疯了,如何通过 shell 脚本来模拟它?我经常将随机实用程序脚本保存在 ~/.bin 中,这是我 PATH 中的第一件事。如果您有类似的设置,也许您可​​以执行以下操作:(未经测试!)

#!/bin/sh
# remapping find!
CMD=`echo $1 | cut -c 1`
if [ $CMD = '-' ]
then
# pwd search
  /usr/bin/find ./ $*
else
# regular find
  /usr/bin/find $*
fi
于 2008-10-11T22:14:53.327 回答
2

我建议如果您正在编写脚本(将来更有可能从一个系统迁移到另一个系统),您应该尝试使用更具体的命令形式,即指定“。” 而不是依赖默认值。出于同样的原因,我什至可能会建议编写sh脚本,而不是依赖bash可能不会随处安装的脚本。

于 2008-10-11T22:18:10.933 回答
1

这可能不是您想要的,但如何:alias find="find ."

或选择一个新名称(findl用于查找本地?)

于 2008-10-11T22:17:17.783 回答
1

您可能想要运行此链接中的命令:https ://www.topbug.ne​​t/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os- X/

它有点过时了,例如我发现我根本不需要在我的路径中添加很多命令。

这通过让您的系统使用软件包中的非 BSD 查找实用程序来解决您的问题findutils,同时还安装您可能需要的其他工具。

于 2015-09-16T19:04:00.097 回答