我如何可以使"发现"的命令OS X默认当前的目录?
-
10-07-2019 - |
题
我是一个沉重的命令行的用户和使用 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
功能,增加了"/" 如果我忘记了,但我失败了。谢谢你的帮助。:)
解决方案
如果您不能约束自己使用find
“正确”,那么为什么不安装GNU findutils
在未来的系统cp
命令你的路径中的目录(从bin
)。
我曾经有过的cp file1 file2
我个人的变种,将文件复制到当前目录,如果在列表中的最后一个项目是不是一个目录。我一直在多年我个人<=>目录 - 但最终删除它,因为我已经不再使用的功能。 (我的“cp.sh”写于1987年和编辑的两倍,在1990年和1997年,为改变版本控制系统符号的一部分。我认为我删除了1998年各地的脚本中的主要问题是,<=>是复制一个文件在另一个和复制两个文件到当前目录之间不明确的。)
考虑编写自己的包装为<=>:
#!/bin/sh
[ ! -d "$1" ] && set -- . "$@"
exec /usr/bin/find "$@"
在第二行说:“如果参数1不是一个目录,然后调整命令行参数包括提前命令其余的点那将是混乱,如果你曾经键入:
~/bin/find /non-existent/directory -name '*.plist' -print
因为不存在的目录不是一个目录和脚本将增加点到命令行 - 那种原因,我停止使用我的私人<=>命令
。其他提示
安装GNU找到代替。
$ brew install findutils
$ alias find=gfind
耶,它的作品!
如果你一定要说是“发现”,然后你想:
alias find=/usr/bin/find\ .
在您的.profile或.bash_profile文件或...。替换在Mac OSX的真实路径(如果不是在/ usr / bin中/查找)。输入完整的路径,以避免周期(bash的通常会解释alias find=find
没有问题,但最好是肯定)。
但你最好不要定义别名find
(findl,myfind等),因为如果你尝试另一个系统上它会成为你的一种习惯和麻烦。
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
我建议,如果你正在写的脚本(这是更可能从一个系统迁移到另一个将来某个时候),你应该尝试使用命令的更具体的形式,即指定“ “。而不是依赖于默认。出于同样的原因,我甚至建议编写脚本sh
,而不是依靠bash
这可能不是随处安装。
这可能不是你想要的,但怎么样:alias find="find ."
或选择新名称(findl
为寻找本地?)
你可能需要运行命令现在这个的链接: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/
它是有点过时,例如我发现我没有添加了许多命令我的道路。
这涵盖了你的问题通过具有系统使用的非BSD找到实用工具的 findutils
包,同时,还安装其他工具,你可能希望为好。