2017-02-28 24 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'。 –