微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何在* nix上查找/ grep目录名与“x”匹配而不是“y”的所有路径?

我有一个像这样的文件夹结构(这是一个小片段):
└── test
  └── cases
    └── model
      ├── client
      │   ├── socketsTest.coffee
      ├── server
      │ └── socketsTest.coffee
      └── shared
          └── findersTest.coffee

问题是,如何列出以.coffee结尾但在客户端文件夹中不存在的所有路径?

以下命令返回与服务器文件夹中存在的.coffee匹配的所有文件

find test -name "*Test.coffee" | egrep '/*server*/'

但我真正需要的是一个正则表达式,除了客户端文件夹中的内容之外还匹配所有内容.

在* nix上最干净的方法是什么?最终目标是返回不在客户端文件夹中的文件,因此对于上面的树将是:

$<find files except those a client folder>
test/cases/model/server/socketsTest.coffee
test/cases/model/shared/findersTest.coffee

我尝试过这样的事情,但没有运气:

find test -name "*Test.coffee" | egrep '*model/[^client]*'

解决方法

您可以使用-prune操作忽略目录. -o表示“或”,因此将其读作“如果它被命名为客户端修剪它,否则打​​印名为* .coffee的文件”.
find test -name client -prune -o -name '*.coffee' -print

或者你可以使用双重测试,它更容易阅读,但效率稍低,因为它会递归到客户端/目录,而第一个完全避免它们.

find test -name '*.coffee' ! -wholename '*/client/*'

原文地址:https://www.jb51.cc/linux/393112.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐