我是一个沉重的命令行用户,并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
函数,如果我忘了就添加"./",但是我失败了.谢谢你的帮助.:)
请改为安装GNU find.
$ brew install findutils $ alias find=gfind
是的,它的作品!
如果你不能自律使用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
命令的原因.
如果你必须将其称为'find',那么你想要:
alias find=/usr/bin/find\ .
在你的.profile或.bash_profile或.... 在Mac OSX上替换真实路径(如果不是/ usr/bin/find).输入完整路径以避免循环(bash通常会解释alias find=find
没有问题,但更好的确定).
但你最好不要命名别名find
(findl,myfind等),因为如果你在另一个系统上尝试它,它将成为你的习惯和麻烦.