【问题标题】:Exclude certain directories in find results in AIX在 AIX 中的查找结果中排除某些目录
【发布时间】:2014-02-24 18:30:31
【问题描述】:

我正在尝试搜索具有扩展属性 (-ea) 但路径名中没有特定字符串的所有目录。我正在尝试:

find / -ea -type d ! -name '*arcdst*'

但是这仍然返回 /arcdst 及其下的所有目录。我在这个站点上查看了类似的答案,但根据 AIX 手册页,-not 不可用,-path 也不可用。这是 AIX 6.1 TL6。

非常感谢, 拉里D

【问题讨论】:

  • 很遗憾我收到以下错误,但感谢您的评论find: 0652-017 -print0 is not a valid option.
  • @shellter 也许我遗漏了一些东西,但我认为这里不需要xargs...只需find ... | grep -v ...。否则它会尝试搜索所有文件的内容...
  • @twalberg:正确。深夜评论错误。 8-/Tnx.

标签: shell unix find ksh aix


【解决方案1】:

您的命令不是在寻找没有 arcdst 的完整路径,而是仅用于 arcdst 以外的名称的目录。 我希望 find 在目录 arcdst 下找到目录和文件, 但 find 应该跳过其结果中的顶级目录。

如果您不介意这点开销,您可以过滤结果。

find / -ea -type d | grep -v 'arcdst'

当你一开始不想 find 在 arcdst 中查找时,你可以告诉 find 不要在 arcdst 目录中查找

find $(ls / | grep -v arcdst) -ea -type d 

【讨论】:

    【解决方案2】:

    您应该使用! -path "pattern" 选项而不是-name

    find / -ea -type d ! -path "*arcdst*"
    

    这将跳过"*arcdst*"路径下的所有目录

    或者你可以使用-regex选项:

    find / -ea -type d ! -regex ".*arcdst.*"
    

    【讨论】:

    • 这在我的非 prod 服务器上确实有效,其中 /usr/bin/find 的日期为 2012 年 9 月 17 日。但是当我在我的脚本最终必须运行的 prod 服务器上尝试它时,文件日期为 2011 年 8 月 9 日,我得到了这个:find: 0652-017 -path is not a valid option. 但即使在较新版本的 find 手册页中也没有提及此选项,我希望它确实如此,因为它似乎有效。
    • 嗯,较旧的 find 二进制文件可能不支持 -path 选项。但是-path确实是获得正确输出的正确方法。
    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多