当前位置:  开发笔记 > 编程语言 > 正文

如何使OS X上的"find"命令默认为当前目录?

如何解决《如何使OSX上的"find"命令默认为当前目录?》经验,为你挑选了3个好方法。

我是一个沉重的命令行用户,并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 find需要路径而GNU find不需要(如果你没有指定,则它假设当前目录).我经常同时使用Linux,Mac OS X和Cygwin,因此让我的所有工具表现相同对我有很大好处.我试着编写一个bash find函数,如果我忘了就添加"./",但是我失败了.谢谢你的帮助.:)



1> odinho - Vel..:

请改为安装GNU find.

$ brew install findutils
$ alias find=gfind

是的,它的作品!



2> Jonathan Lef..:

如果你不能自律使用find'正确',那么为什么不在系统命令之前在你的PATH上的目录中安装GNU find(from findutils)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命令的原因.



3> tzot..:

如果你必须将其称为'find',那么你想要:

alias find=/usr/bin/find\ .

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

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

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有