我有这样的目录结构
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
Run Code Online (Sandbox Code Playgroud)
Data目录中的所有文件夹中都有一个传入的子文件夹.我想从除def/incoming和456 /传入目录之外的所有文件夹和子文件夹中获取所有文件.我尝试了以下命令
find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作.
拉维
sam*_*hen 193
这有效:
find /home/feeds/data -type f -not -path "*def/incoming*" -not -path "*456/incoming*"
Run Code Online (Sandbox Code Playgroud)
说明:
find /home/feeds/data
:从指定路径开始递归查找-type f
:仅查找文件-not -path "*def/incoming*"
:不要def/incoming
在其路径中包含任何内容-not -path "*456/incoming*"
:不要456/incoming
在其路径中包含任何内容仅仅为了记录:你可能需要深入挖掘,因为有很多search'n'skip星座(就像我必须这样).可能会发现这prune
是你的朋友而-not -path
不会做你期望的事情.
所以这是15个查找排除目录的例子的一个有价值的例子:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
要链接到最初的问题,排除最后为我工作,如下所示:
find . -regex-type posix-extended -regex ".*def/incoming.*|.*456/incoming.*" -prune -o -print
Run Code Online (Sandbox Code Playgroud)
然后,如果您希望找到一个文件并仍然排除pathes,只需添加即可| grep myFile.txt
.
它可能还取决于您的查找版本.我知道了:
$ find -version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77717 次 |
最近记录: |