2017-02-28 53 views
0

特定文件假设我的目录结构看起来像如何排除在发现

A--file1.cpp 
    file2.cpp 
    file3.cpp 
    file1.h 
    file2.h 
    file3.h 

B--file1.cpp 
    file2.cpp 
    file3.cpp 
    file1.h 
    file2.h 
    file3.h 

,我的目标是要找到除了file1.cpp每个CPP文件中的文件夹

find A/ B/ -name \*.cpp会发现所有的文件,并且我尝试了find A/ B/ ! -name file1.cpp -name \*.cpp这也将从B文件夹中排除file1.cppfind A/ B/ -prune -o file1.cpp -name \*.cpp也不起作用。什么是正确的方法来做到这一点?

回答

2

-path谓词将让您忽略特定的文件或目录。

find . -path ./A/file1.cpp -prune -o -type f -name '*.cpp' -print 

如下测试:

tempdir=$(mktemp -d "$TMPDIR"/test.d.XXXXXX) 
cd "$tempdir" && { 
    mkdir -p A B 
    touch {A,B}/file{1,2,3}.{cpp,h} 
    find A B -path A/file1.cpp -prune -o -type f -name '*.cpp' -print 
    rm -rf -- "$tempdir" 
} 

...发光的输出:

A/file2.cpp 
A/file3.cpp 
B/file1.cpp 
B/file2.cpp 
B/file3.cpp 
+0

我试图找到'A/B/-path ./A/file1.cpp -prune -o-type f -print',它显示所有6个文件 – user3667089

+0

我已经用测试程序和输​​出进行了修改。你可以复制并粘贴你自己。 –

+1

您的'-path'谓词需要根据您传递给'find'的'path'参数来写出名称,告诉它在哪里/如何开始搜索。因此,如果你通过'find'目录名称'A',它是'A/file1.cpp'。 –