搜索给定目录以外的文件

时间:2012-04-30 17:00:11

标签: linux shell find

我有一个包含文件的目录./src。除了.c中的.c个文件外,我想提取其中的所有./src/test个文件。我尝试了

的变体
find ./src -name "*.c" -and -not -name ./src/test

(灵感来自here)但没有一个成功。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您可以使用grep吗?

find ./src -name \*.c | grep -v ./src/test

答案 1 :(得分:3)

我会使用grep -v后置过滤器,假设你的路径中没有换行符(空格就可以了):

find ./src -name "*.c" | grep -v '/src/test/'

我认为你的麻烦是-name仅查看路径的最后一个元素,因此带有斜杠的-name根本不起作用。

如果您的find版本支持该版本,则使用-path代替-name可能会有效:

find ./src -name "*.c" -and -not -path './src/test/*'

注意修改后的操作数为-path

答案 2 :(得分:2)

您希望-regex匹配整个路径(-name仅匹配当前目录中的文件名)和-prune以消除树的该部分:

find ./src -regex '^./src/test$' -prune -o -name '*.c' -print0 | xargs -0 ....
没有find的{​​p> -print0几乎总是一个问题,如果有人创建了一个带有空格的文件名(或更糟糕的换行符),那么等待发生。