Lan*_*ard 7 unix linux shell grep find
我有一个像这样的文件夹结构(这是一个小片段):
??? test
??? cases
??? model
??? client
? ??? socketsTest.coffee
??? server
? ??? socketsTest.coffee
??? shared
??? findersTest.coffee
Run Code Online (Sandbox Code Playgroud)
问题是,如何列出文件夹中.coffee存在但不存在的所有路径client?
以下命令返回.coffee与server文件夹中存在的文件匹配的所有文件:
find test -name "*Test.coffee" | egrep '/*server*/'
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是一个正则表达式,除了客户端文件夹中的内容之外还匹配所有内容.
在*nix上最干净的方法是什么?最终目标是返回不在client文件夹中的文件,因此对于上面的树将是:
$ <find files except those a client folder>
test/cases/model/server/socketsTest.coffee
test/cases/model/shared/findersTest.coffee
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情,但没有运气:
find test -name "*Test.coffee" | egrep '*model/[^client]*'
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 11
您可以使用该-prune操作忽略目录.-o意思是"或",所以读这个,"如果它被命名为客户端修剪它,否则打印文件名为*.coffee".
find test -name client -prune -o -name '*.coffee' -print
Run Code Online (Sandbox Code Playgroud)
或者你可以使用双重测试,它更容易阅读但效率稍差,因为它会递归到client/目录中,而第一个完全避免它们.
find test -name '*.coffee' ! -wholename '*/client/*'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13798 次 |
| 最近记录: |