我有这样的目录结构
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
字符串
数据目录内的所有文件夹中都有一个传入子文件夹。我想从所有文件夹和子文件夹中获取所有文件,除了def/传入和456/传入目录。我试过了下面的命令
find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print
型
但它并不像预期的那样工作。
拉维
6条答案
按热度按时间q3aa05251#
这个方法的作用是:
字符串
说明:
find /home/feeds/data
:从指定路径递归开始查找-type f
:仅查找文件-not -path "*def/incoming*"
:不包含任何def/incoming
作为其路径的一部分-not -path "*456/incoming*"
:不包含任何456/incoming
作为其路径的一部分z6psavjg2#
只是为了记录:你可能需要深入挖掘,因为有许多搜索'n'跳过星座(就像我不得不)。可能会发现
prune
是你的朋友,而-not -path
不会做你期望的事情。所以这是一个有价值的例子,包括15个排除目录的find示例:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
链接到最初的问题,排除最终为我工作了这样:
字符串
然后,如果您希望找到一个文件,但仍然排除路径,只需添加
| grep myFile.txt
。这也可能取决于您的查找版本。我看到:
型
svdrlsy43#
-name
只匹配文件名,而不是整个路径。您希望使用-path
来代替您正在修剪目录的部分,如def/incoming
。j7dteeu84#
字符串
b5lpy0ml5#
以下是How to exclude a directory in find . command的答案:
字符串
lztngnrs6#
这就是我排除所有
.git
目录并将其传递给-exec
,以便在字符串
-not -path '*/\.*'
将排除所有隐藏目录-type f
将只列出类型文件,然后您可以将其传递给-exec
或任何您想要做的事情