find - Dateien und Pfade ausschließen
Hi, ich möchte mein find daran hindern sowohl gewisse Dateien als auch gewisse Verzeichnisse nach einer Suche mit auszugeben. In man find bin ich auf folgendes gestoßen: Mit find . ! -name "*file9*" hindere ich find daran nach der Suche alle Dateien auszugeben, die file9 als Namensbestandteil haben. Mit find . -path './nottofind' -prune -o -print hindere ich find daran irgendeine Datei aus dem Verzeichnis ./nottofind auszugeben. Wenn ich das kombiniere: find . ! -name "*file9*" -path './nottofind' -prune -o -print wirkt jedoch nur das prune, Dateien namens *file9* werden dennoch gefunden :o(. Wie würde klein Louis Papa Hacke jetzt fragen: "...und waruuhuumm?" Liebe Grüße Philipp -- registered Linux user number 258854 HOW-TO? -> GOTO http://counter.li.org/
Hi Philipp Philipp Zacharias schrieb:
Wenn ich das kombiniere: find . ! -name "*file9*" -path './nottofind' -prune -o -print wirkt jedoch nur das prune, Dateien namens *file9* werden dennoch gefunden :o(.
Wie würde klein Louis Papa Hacke jetzt fragen: "...und waruuhuumm?"
du beziehst dich sicher auf die manpage von wegen expr1 -a expr2 Same as expr1 expr2 oder expr1 -and expr2, ich hab an sowas auch mal ne weile gebastelt, probier die dinger mal jew. in eine runde klammer zu stecken find (- name ...) -a ( -prune ... ) und probehalber vielelicht noch eine um beide Bedingungen. MfG. Falk
On Die, 03 Jun 2003 at 17:49 (+0200), Falk Sauer wrote:
Hi Philipp
Philipp Zacharias schrieb:
Wenn ich das kombiniere: find . ! -name "*file9*" -path './nottofind' -prune -o -print wirkt jedoch nur das prune, Dateien namens *file9* werden dennoch gefunden :o(.
Wie würde klein Louis Papa Hacke jetzt fragen: "...und waruuhuumm?"
du beziehst dich sicher auf die manpage von wegen expr1 -a expr2 Same as expr1 expr2 oder expr1 -and expr2, ich hab an sowas auch mal ne weile gebastelt, probier die dinger mal jew. in eine runde klammer zu stecken find (- name ...) -a ( -prune ... ) und probehalber vielelicht noch eine um beide Bedingungen.
Ansatz gut, Realisierung nicht ;-) Beim find muss man immer dran denken, dass alles, was im find ankommen soll und in der Shell eine Sonderbedeutung hat, vor dieser versteckt werden muss. Das trifft hier auf die () zu, die in der Shell eine Subshell eröffnen. Dann passiert dies: jan@k500:~> find . ! ( -type f -name x ) -print bash: syntax error near unexpected token `(' Die Und-Verknüpfung per -a oder -and ist nicht notwendig, das ist der Default (bei einer Oder-Verknüpfung ist das anders). Die Sache mit dem Pfad ist etwas komplizierter. Bei Deinem Konstrukt hanelt es sich um eine _and_ und eine _or_ Verknüpfung, die - da nicht geklammert - von links nach rechts abgearbeitet wird. Was Du willst ist folgendes: Suche ausgehend vom aktuellen Verzeichnis alle Einträge, die nicht file9 im Namen haben _oder_ im Pfad ./nottofind liegen, und zeige diese an. Du brauchst also ein -o statt des Default-and: find . -name "*file9*" -o -path './nottofind' -prune -o -print Zur besseren Übersicht kann man klammern, obwohl das in diesem Fall nicht notwendig ist (und denkt an die allmächtige Shell, die diese Klammern nicht bemerken darf): find . \( -name "*file9*" -o -path './nottofind' -prune \) -o -print Und so kann es dann aussehen: jan@k500:~/tmp/findtest> tree . |-- absfile9de |-- datei2 `-- nottofind `-- datei 1 directory, 3 files jan@k500:~/tmp/findtest> find . -name "*file9*" -o -path './nottofind' -prune -o -print . ./datei2 Andere Varianten (um Dich ein wenig zu verwirren ;-): find . ! -name "*file9*" ! -path './nottofind*' -print find . ! \( -name "*file9*" -o -path './nottofind*' \) -print find . ! -regex ".*file9.*\|\./nottofind.*" -print So, das soll erstmal reichen ;-) Jan
Hi Jan, Jan Trippler schrieb:
On Die, 03 Jun 2003 at 17:49 (+0200), Falk Sauer wrote:
Ansatz gut, Realisierung nicht ;-)
hast ja recht, man sollte wirklich _alle_ Tips vorher ausgiebig testen oder lieber das Maul halten ;-)
Die Und-Verknüpfung per -a oder -and ist nicht notwendig, das ist der Default (bei einer Oder-Verknüpfung ist das anders).
ich erinner mich aber dunkel, das da mal was war, der default brauchte mal etwas Nachhilfe durch Klammern, ist aber schon ewig her, seitdem setz ich lieber eine zuviel ... und bei dem -o hab ich gestern auch kurz gezögert. MfG. Falk
On Mit, 04 Jun 2003 at 06:57 (+0200), Falk Sauer wrote:
Hi Jan,
Jan Trippler schrieb:
On Die, 03 Jun 2003 at 17:49 (+0200), Falk Sauer wrote:
Ansatz gut, Realisierung nicht ;-)
hast ja recht, man sollte wirklich _alle_ Tips vorher ausgiebig testen oder lieber das Maul halten ;-)
Nein, da hast Du mich falsch verstanden. Dein Tipp war ja so formuliert, um als _guck mal in dieser oder jender Richtung in die Doku_-Hinweis verstanden zu werden. Mein Spruch war deswegen als *nicht ernstzunehmen* gekennzeichnet. Wenn das anders angekommen ist, dann sorry. Jan
participants (3)
-
Falk Sauer
-
Jan.Trippler@t-online.de
-
Philipp Zacharias