我有一个非常具体的需求,需要使用脚本在Solaris中查找未拥有的文件和目录,并且需要能够从查找中排除完整的目录路径,因为它们包含可能有数千个未拥有的文件(这是正常的,因为它们是托管在其他服务器上的文件)。我甚至不希望find搜索这些目录,因为它会使服务器崩溃(CPU利用率长时间飙升到99%),因此将find结果通过egrep进行过滤以排除这些目录不是一个选项。
我知道可以通过以下方式排除一个或多个目录名称:
我希望能够防止find甚至搜索以下目录(作为示例):
我尝试在-name参数中使用正则表达式,但由于find仅将“name”与所找到的内容的基本名称匹配,因此我无法指定路径。不幸的是,Solaris的find不支持GNU find选项,如-wholename或-path,所以我有些束手无策。
我的目标是编写一个具有以下语法的脚本:
script.sh "/path/to/dir1,/path/to/dir2,/path/to/dir3"
在Solaris(5.8及以上版本)上使用find和标准sh脚本(/ bin / sh),我该如何实现这一点?
我知道可以通过以下方式排除一个或多个目录名称:
find / -mount -local \( -type d -a \( -name dir1 -o -name dir2 -o dir3 \) \) -prune -o \( -nouser -o -nogroup \) -print
然而,这将匹配任何目录结构中的dir1和dir2,这根本不是我想要的。我希望能够防止find甚至搜索以下目录(作为示例):
/opt/dir1
/opt/dir2
/var/dir3/dir4
我希望它能够在以下目录中查找未被拥有的文件和目录:
/opt/somedir/dir1
/var/dir2
/home/user1/dir1
我尝试在-name参数中使用正则表达式,但由于find仅将“name”与所找到的内容的基本名称匹配,因此我无法指定路径。不幸的是,Solaris的find不支持GNU find选项,如-wholename或-path,所以我有些束手无策。
我的目标是编写一个具有以下语法的脚本:
script.sh "/path/to/dir1,/path/to/dir2,/path/to/dir3"
在Solaris(5.8及以上版本)上使用find和标准sh脚本(/ bin / sh),我该如何实现这一点?
-exec test "{}" = "/path/to/exclude" \; -prune
来模拟它。 {}应扩展为完整路径名。”我测试了这个解决方案,虽然它需要更多的处理能力,但它有效。如果我要针对文件服务器运行这个解决方案,我担心会增加处理时间和CPU使用率... 不过我还是考虑采纳这个答案。你对此有什么看法? - Yanick Girouard