ubuntuusers.de

locate - search pattern ausschliessen

Status: Gelöst | Ubuntu-Version: Ubuntu 15.04 (Vivid Vervet)
Antworten |

holzkohlengrill

Anmeldungsdatum:
31. Oktober 2012

Beiträge: 71

Ich habe schon des oeffteren danach gesucht, aber leider nichts gefunden. Deshalb frage ich jetzt mal danch.

Ich habe oft das Problem, wenn ich mit locate etwas suchen will, dass ich bestimmte keywords ausschliessen will, um die Ergebnisse einzugrenzen. Manchmal weiss ich nur nach was ich neben dem keyword nicht suchen will. Deshalb waere es praktisch, wenn es eine Option/tool gaebe, dass wie locate oder aehnlich arbeitet und bei dem ich auch keywords ausschliessen kann.

Vielen Dank soweit.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

holzkohlengrill schrieb:

Ich habe oft das Problem, wenn ich mit locate etwas suchen will, dass ich bestimmte keywords ausschliessen will, um die Ergebnisse einzugrenzen. Manchmal weiss ich nur nach was ich neben dem keyword nicht suchen will. Deshalb waere es praktisch, wenn es eine Option/tool gaebe, dass wie locate oder aehnlich arbeitet und bei dem ich auch keywords ausschliessen kann.

Geht es Dir um Schlüsselwörter in Dateinamen oder in -inhalten?

Beides geht mit find, das erste ist etwas leichter:

1
find wo/auch/immer ! -name '*dies_nicht*'

Beim zweiten muss man Tools aus der grep-Familie hinzunehmen:

1
find wo/auch/immer -type f ! -exec fgrep -qw dies_nicht {} \; -print

Das kann man natürlich noch beliebig komplizierter machen. Es hängt halt immer vom konkreten Fall ab.

holzkohlengrill

(Themenstarter)

Anmeldungsdatum:
31. Oktober 2012

Beiträge: 71

Danke fuer deine Antwort.

Wenn ich dein erstes Beispiel richtig verstehe, wuerde ich dann aber alle Dateien finden, die nicht *dies_nicht* enhalten? Vielleicht habe ich dich auch falsch verstanden. Trotzdem nochmal anders ausgedrueckt, was meine Intention ist:

<Command> {<Pfad>} <zu_suchender_string_in_datei/pfad> {<optionen> ...}

.

{ } : Optional
Optionen: z.B. -e bzw. --exclude >> "-e "dies_nicht"

Primaer geht es mir um Dateinamen bzw. um Pfade.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

holzkohlengrill schrieb:

Wenn ich dein erstes Beispiel richtig verstehe, wuerde ich dann aber alle Dateien finden, die nicht *dies_nicht* enhalten?

Ja genau. Probier es doch einfach mal aus.

Primaer geht es mir um Dateinamen bzw. um Pfade.

Primär oder ausschließlich? Andernfalls muss man die Ansätze ggf. auch kombinieren.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Eventuell ginge es ja auch ganz simpel mit dem Holzhammer.
Einfach aus der locate- Ausgabe den Müll wegfiltern, mit grep:

locate dieses  |  grep -v  "aber dies nicht"

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

1
2
3
locate Schimmel | grep -v Pferd 
locate -i schimmel | grep -iv pferd 
locate -i schimmel | egrep -iv "(docx|odt|pdf|html)"

Find ist schwerlich eine Alternative - das sucht ja u.U. die ganze Festplatte ab, immer wieder auf's neue.

Die Ergebnisse, die bei locate aus einer indizierten Datenbank kommen, um Größenordnungen schneller, kann man mit grep nach Stopwords filtern, -i ignoriert Groß-/Kleinschreibung, egrep ist die extended-Suche die solche Listen von Stopwords erlaubt.

holzkohlengrill

(Themenstarter)

Anmeldungsdatum:
31. Oktober 2012

Beiträge: 71

Vielen Dank an user_unknown und track. Danach habe ich gesucht. Die --invert-match Option habe ich wohl uebersehen. Man haette auch einfach exclude schreiben koennen. 😉

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

user unknown schrieb:

Find ist schwerlich eine Alternative - das sucht ja u.U. die ganze Festplatte ab, immer wieder auf's neue.

Ich ziehe das tatsächlich vor, weil locate immer ein wenig mit der Aktualität des Index hinterher hinkt.

Die Ergebnisse, die bei locate aus einer indizierten Datenbank kommen, um Größenordnungen schneller, kann man mit grep nach Stopwords filtern, -i ignoriert Groß-/Kleinschreibung, egrep ist die extended-Suche die solche Listen von Stopwords erlaubt.

Ja, die Lösung mit grep -v ist auch gut - man muss sich nur klar sein, dass dann der komplette Pfad gematched wird. Kommt halt immer darauf an, was man will. Ich hatte das so verstanden, dass es um den Basename und nicht irgendwelche Verzeichnisnamen ging.

holzkohlengrill

(Themenstarter)

Anmeldungsdatum:
31. Oktober 2012

Beiträge: 71

Dann hab ich mich wohl unklar ausgedrückt. Das tut mir leid. Aktualisieren kannst du den Index übrigens auch manuell mit

 sudo updatedb 

aktualisieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

rklm schrieb:

user unknown schrieb:

Find ist schwerlich eine Alternative - das sucht ja u.U. die ganze Festplatte ab, immer wieder auf's neue.

Ich ziehe das tatsächlich vor, weil locate immer ein wenig mit der Aktualität des Index hinterher hinkt.

Ich suche fast immer Dateien die älter als 24h sind, und daher indiziert sein sollten. Wenn nicht weiß ich das wiederum fast immer.

Daher benutze ich für so was fast nie find.

Antworten |