2017-02-28 6 views
0

Angenommen meine Verzeichnisstruktur sieht aus wieWie eine bestimmte Datei in Fund auszuschließen

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 

und mein Ziel jede CPP-Datei neben file1.cpp im A-Ordner

find A/ B/ -name \*.cpp finden Sie alle Dateien zu finden ist, und ich habe versucht find A/ B/ ! -name file1.cpp -name \*.cpp dies wird file1.cpp aus dem B-Ordner ausgeschlossen. find A/ B/ -prune -o file1.cpp -name \*.cpp funktioniert auch nicht. Was ist der richtige Weg?

Antwort

2

Das Prädikat -path lässt Sie eine bestimmte Datei oder ein bestimmtes Verzeichnis ignorieren.

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

Geprüft wie folgt:

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" 
} 

... emittierende Ausgang:

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

Ich habe versucht, 'A/B/-Pfad ./A/file1.cpp -prune finden -o-Typ f -print und es zeigt alle 6 Dateien – user3667089

+0

Ich habe mit Testverfahren und Ausgabe geändert. Sie können das selbst kopieren und einfügen. –

+1

Ihr '-Pfad'-Prädikat muss den Namen entsprechend dem' path'-Argument schreiben, das Sie an 'find' übergeben haben und ihm mitteilen, wo/wie die Suche gestartet werden soll. Wenn Sie also den Verzeichnisnamen 'A'' finden ', ist es 'A/file1.cpp'. –

Verwandte Themen