Schließen Sie Ordner mit einem Pfadmuster mit dem Befehl FIND auf der Ubuntu-Konsole aus

851
onirix
PROJECTS |___ SITE1 | |____files (to exclude) | |____img | |____js | |___ SITE2 | |____files (to exclude) | |____img | |____js | |___ SITE3 |____files (to exclude) |____img |____js 

Hallo, ich möchte in der Suche SITE x Ordner ohne Inhalt von Dateien Ordnern.

Ich versuche, diese aber es zeigt mir Fehler für Dateien in Berechtigungen Dateien Ordner (so scheinen sie nicht ausschließen):

find . ! -path "*/files/*" -type f -name 'foo' 

Es wird angezeigt (ich bin im PROJECTS-Verzeichnis):

./SITE1/img/foo.png ./SITE1/js/foo.js find: `./SITE1/files/201501': Permission denied find: `./SITE1/files/201412': Permission denied find: `./SITE1/files/201501': Permission denied ... (the two firsts matches are pretty good, but I break the execution after, it print too many indesirble matches) 

Diese Antwort auf askubuntu hat mich inspiriert .

Ich versuche auch die Option -prune wie in diesem Beispiel, ohne eine Lösung zu finden…


Ich hätte gerne das Äquivalent dieser Suche mit egrep, aber nach Dateinamen

egrep -Rns --exclude-dir=files 'foo' * 

Danke für Ihre Hilfe !

0
Wir brauchen viel mehr Informationen. Ich habe keine Ahnung, was Sie fragen. Sie haben keine direkte Frage. Versuchen Sie noch einmal zu schreiben, damit Sie eine bestimmte Frage stellen. Eric F vor 9 Jahren 0
Wenn ich mich nicht irre, was möglich ist, führt ein Ausschluss dazu, dass die "Treffer" nicht angezeigt werden, die Verzeichnisse jedoch nicht angehalten werden. Die Dokumentation (Ausgabe --help, Manpage oder etwas anderes) für den Befehl find sollte angeben, wie sich find verhält. Haben Sie diese Dokumentation durchgesehen? killermist vor 9 Jahren 1
Dies ist in Windows 8 eigentlich unangenehm einfach zu tun ... stecken Sie `find` unter Linux oder können Sie Windows dafür verwenden? Mokubai vor 9 Jahren 0
Versuchen Sie die `-prune`-Direktive von 'find'. Ich schlage vor, dass Sie nach Beispielen suchen (es gibt ein paar gute Beispiele hier bei Super User), da die Manpage an sich nicht sehr aufschlussreich ist, wie `-prune` verwendet wird. G-Man vor 9 Jahren 0
@Mokubai Es ist beunruhigend, wie viel einfacher dies unter "* nix" ist als unter "Windows 8" BroSlow vor 9 Jahren 0
@BroSlow Unter Windows 8 müssen Sie nur in das Suchfeld klicken und "-" files "-directory" eingeben, und es wird * genau * die Frage gestellt, ohne dass Sie zuerst ein neues Terminalfenster öffnen müssen, `cd` ' Verzeichnis und ermitteln dann die Syntax des `find`-Befehls. Der "* nix" scheint dem "langen" Weg sehr ähnlich zu sein. Aber ich bin nicht hier, um zu evangelisieren, ich wollte nur sehen, ob andere Optionen verfügbar waren oder ob eine andere Methode helfen würde. Mokubai vor 9 Jahren 1
@Mokubai Das wäre eine ok Option für dieses Beispiel, aber es ist noch weniger präzise (dh was ist, wenn Sie eine Datei namens `files` haben?). BroSlow vor 9 Jahren 0

1 Antwort auf die Frage

0
onirix

OK, fertig !

Ich wusste nicht, wie man mit Pflaumen argumentiert. Dies entspricht meiner Nachfrage

find * -path "*/files/*" -prune -o -name 'foo' -type f -print 

Weitere Erläuterungen hier


Andererseits sollte ich mal neugierig sein, ob es eine Syntax gibt ! (NICHT) Argument wie in diesem Beispiel auf AskUbuntu, wenn jemand eine Idee hat.

Ja, aber das `AskUbuntu`-Beispiel, das Sie verlinkt haben, hindert` find` nicht daran, diese Verzeichnisse weiter zu durchsuchen, sodass Sie immer noch die Fehler erhalten. Ihre Syntax ist in keiner Weise schlechter und im schlimmsten Fall niemals langsamer (fast immer schneller). Beachten Sie jedoch, dass Sie bei der Verwendung von "*" anstelle von "." Wahrscheinlich dotfiles in Ihrem Verzeichnis der obersten Ebene auslassen BroSlow vor 9 Jahren 0