代码之家  ›  专栏  ›  技术社区  ›  mxcl

如何使OSX上的“find”命令默认为当前目录?

  •  14
  • mxcl  · 技术社区  · 17 年前

    我是一个大量的命令行用户,使用 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
    

    因为BSD 发现 没有(如果未指定当前目录,则假定为当前目录)。我经常同时使用Linux、Mac OS X和Cygwin,因此让我的所有工具都具有相同的性能对我来说是非常有益的。我试着写一个聚会 函数,该函数添加了“/”如果我忘记了,但我失败了。谢谢你的帮助。:)

    7 回复  |  直到 17 年前
        1
  •  20
  •   odinho - Velmont    13 年前

    改为安装GNU-find。

    $ brew install findutils
    $ alias find=gfind
    

    是的,它起作用了!

        2
  •  11
  •   Jonathan Leffler    17 年前

    如果你不能约束自己使用 find “正确”,那么为什么不安装GNU呢 发现 findutils )在系统前面路径上的目录中 发现 命令

    我以前有自己的私人版本的 cp 如果列表中的最后一项不是目录,则会将文件复制到当前目录。我把它保存在我的个人档案里 bin 多年来,我一直使用这个目录,但最终还是删除了它,因为我不再使用这个功能。(我的“cp.sh”是在1987年编写的,在1990年和1997年编辑了两次,作为版本控制系统符号更改的一部分。我想我在1998年左右删除了它。脚本的主要问题是 cp file1 file2 将一个文件复制到另一个文件和将两个文件复制到当前目录之间不明确。)

    考虑写自己的包装 发现 :

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

    第二行表示“如果参数1不是目录,则调整命令行参数,使其在命令的其余部分之前包含点。如果键入以下内容,则会造成混淆:

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

    因为不存在的目录不是目录,脚本会在命令行中添加点——这就是我停止使用私有目录的原因 内容提供商

        3
  •  6
  •   tzot    17 年前

    如果必须称之为“查找”,则需要:

    alias find=/usr/bin/find\ .
    

    alias find=find 没有问题,但最好确定)。

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

        4
  •  4
  •   Owen Ryan Doherty    17 年前
    find ./ -name "*.plist"
    

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

    #!/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
    
        5
  •  2
  •   Greg Hewgill    17 年前

    sh 脚本而不是依赖于 bash 可能不会安装在任何地方。

        6
  •  1
  •   James Fassett    17 年前

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

    或者选择一个新名称( findl 找本地的?)

        7
  •  1
  •   Pysis    7 年前

    您可能希望运行此链接中的命令: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/

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

    findutils 软件包,同时安装您可能需要的其他工具。