排除查找命令

我需要一些帮助让find命令在脚本中工作。 我需要能够排除一些目录。 下面我有我正在做的工作。

 sudo find / ( -name firefox -o -name thunderbird -o -name seamonkey \) -type f 2>/dev/null|grep -v '(10_Recommended|repo)' 

我想排除一些目录,所以脚本或find命令不需要那么长时间。

在上面的例子中,我想排除/export/repo ,这是一个NFS挂载和/10_Recommended* ,它是在Solaris服务器上使用的补丁集的开始。 目前的例子是: /10_Recommended_CPU_2014-01

我曾尝试使用-prune! 声明,它只是不工作。 有人能帮我一个吗?

我正在Solaris 10,RHEL 5,SLES 11 SP2上调整此命令。

尝试添加:

-not -path "/10_Recommended*" -not -path "/export/repo/*"

但要小心,这些存储库的path取决于您在何处以及如何执行find命令。

如果你在/你做了一个find -name ,那么你必须添加一个. 在不想要的path。

对你而言,这将是:

find -name whatever -not -path "./10_Recommended*" -not -path "./export/repo/*"

但是,如果您在查找命令后添加/像您一样,则必须删除这些点:

find / -name whatever -not -path "/10_Recommended*" -not -path "/export/repo/*"

尝试这个:

 find / \( -path /export -o -path "/*Recommended*" \) -prune -o \ \( -name iceweasel -o -name thunderbird -type f \) -print 2>/dev/null 

这里的推理是-prune是一种后缀“action”,最好与-path结合使用。 列出您要先忽略的path,然后列出您要查找的文件。 与其他查找操作的前缀性质相比,这看起来不自然。

以这种方式,首先看到path被修剪,如果不是,则执行-o开关的“另一侧”。 反过来,它会深入search,并且修剪从来没有达到,或者至less这是我的理解。

可移植性将成为一个问题,尤其是在Solaris和* nix之间。 也许你会在OpenCSW中find的版本,但是没有保证。 掀起一个小的shell脚本,并从uname ,一个悠久的系统pipe理员的传统检查操作系统types。

下面是我的机器的一个例子,使用GNU find:

 [fuzzed@ops ~]$ find / -path /usr -prune -o \( -name rsync -o -name bash \) -print 2>/dev/null [fuzzed@ops ~]$ find / -path /usr/share -prune -o \( -name rsync -o -name bash \) -print 2>/dev/null /usr/bin/bash /usr/bin/rsync 

我的find版本:

 [fuzzed@ops ~]$ find --version find (GNU findutils) 4.5.11 

此外,有些谓词支持globbing或正则expression式,所以检查出来。

感谢大家的帮助。 下面我已经发布了我的问题的答案,或者至less是什么对我有用。 我在Solaris 10,RHEL 5和SLES 11.2服务器上testing下面的find命令。

所以下面我已经显示了最终的查找命令。

searchJava

 # find / \( -name 10_Recommended* -o -name share \) -prune -o -type f -name java -print 2>/dev/null 

searchMozilla应用程序

 # find / \( -name 10_Recommended* -o -name share \) -prune -o -type f \( -name firefox -0 -name thunderbird -0 -name seamonkey \) -print 2>/dev/null 

我希望有人鳍这个有用的。