Dateisuche mit regulären Ausdrücken

Hinweis: In dem Thema Dateisuche mit regulären Ausdrücken gibt es 13 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Ich will mit dem Gnome-Search-Tool alle meine Dateien der Arten .log, .nav u.a. löschen. In das Feld für reguläre Ausdrücke gebe ich ein:
    \.aux|\.blg|\.log|\.out|\.bbl|\.nav|\.snm|\.backup|\.tex~|\.toc
    aber das findet gar nichts. "log|aux" findet zu viel, weil die Punkte fehlen. "\.aux" findet gar nichts. Wie also kann ich nach einem Punkt im Dateinamen suchen? Ich dachte, den muß man mit "\" maskieren. Ich habe das auf golatex.de gefragt. Man kann die Dateien löschen mit
    find \( -iname '*.aux' -o -iname '*.blg' -o -iname '*.log' -o -iname '*.out' -o -iname '*.bbl' -o -iname '*.nav' -o -iname '*.snm' -o -iname '*.backup' -o -iname '*.toc' -o -iname '*.tex~' \) -exec rm {} \;
    Aber ich wüßte auch gerne, wie es mit regulären Ausdrücken geht.

    OpenSUSE Leap 15.5 mit Xfce

    2 Mal editiert, zuletzt von Oriel7 ()

    Für den Inhalt des Beitrages 31339 haftet ausdrücklich der jeweilige Autor: Oriel7

  • Hallo Oriel7,


    Ich kenne "Gnome-Search-Tool" nicht, aber trotzdem:


    Zitat von "Oriel7"


    Ich dachte, den muß man mit "\" maskieren


    Generell ist die Regel so:


    Wenn der '.' keine spezielle Bedeutung hat (also einfach als 'Punkt' eingelesen und gewertet wird, muss der auch nicht maskiert werden.


    Hat '.' jedoch eine spezielle Bedeutung (z.B. im 'sed' Editor bedeutet '.' = irgend ein Zeichen), dann muss '.' mit '\' geschützt werden sofern der 'Punkt' nicht substituiert werden soll.


    Also, in Deinem Fall ist ein Punkt = ein Punkt und muss daher nicht geschützt werden.


    *.aux, *.blg, etc.


    ('*' bedeutet "irgend etwas")


    Also:


    *.txt findet: abc.txt, oder 12345.txt, etc.


    abc*.txt findet: abc.txt, oder abc123.txt, etc.


    abc*xyz.txt findet: abcxyz.txt, oder abc123xyz.txt, etc.


    Ich habe noch schnell in dem von Dir gegebenen Link nachgeschaut:


    Code
    > rm <Verz.>/*.ext -R


    muss heissen:

    Code
    > rm <Verz.1>/*.ext


    (ohne '-R') Aber:

    Code
    > rm -r <Verz.1>/<Verz.2>


    d.h. '-r' löscht Verzeichnisse (in diesem Fall Verz.2). Lese mal die Manual Pages für 'rm'


    Zitat


    > man 1 rm


    Gruss,
    Roland

    2 Mal editiert, zuletzt von rme ()

    Für den Inhalt des Beitrages 31345 haftet ausdrücklich der jeweilige Autor: rme

  • Also, in Deinem Fall ist ein Punkt = ein Punkt und muss daher nicht geschützt werden.

    Danke, aber im Gnome-Search-Tool gibt es ein Kriterium "Dateiname stimmt mit regulärem Ausdruck überein". Das will ich verwenden, um mit ODER suchen zu können. *.aux führt da zu null Treffern, und .tex findet auch latex.pdf. Deshalb wollte ich "\.aux" verwenden, aber das findet nichts, auch test.aux nicht.

    OpenSUSE Leap 15.5 mit Xfce

    Für den Inhalt des Beitrages 31353 haftet ausdrücklich der jeweilige Autor: Oriel7

  • Ich kenne das Tool auch nicht.


    Aber bei REs wirst du den Stern anders formulieren müssen.
    In Regexes ist der Stern das Zeichen für: der vorhergehende Ausdruck darf null bis unendlich oft vorkommen.


    Also musst du es so schreiben


    .*\.ext


    Der erste Punkt ist ein beliebiges Zeichen, das wegen des folgenden Sternes beliebig oft vorkommen kann.
    Dann kommt ein Punkt ( er ist wortwörtlich gemeint, da er mit \ maskiert ist )
    Zuletzt die gewünschte Extension.


    Es gibt sher viele Regexes, die alle seht ähnlich aussehen, aber dennoch ihre spezifischen Feinheiten haben.
    Es lohnt sich immer ein Blick in die Doku des jeweils verwendeten.

    Für den Inhalt des Beitrages 42671 haftet ausdrücklich der jeweilige Autor: uhelp

  • Danke, das leuchtet mir ein, aber „.*\.log“ im Feld „Dateiname stimmt mit regulärem Ausdruck überein“ findet nichts. Ebenso „\.log“. Versteh ich nicht.


    Im Feld „Name enthält“ müße man gemäß der Anleitung mit [ ] Alternativen angeben können, aber weder „*.[(log)(aux)]“ noch „*.[log aux]“ noch „*.[log aux]“ noch „*.[.log|.aux]“ noch „*.[(.log)|(.aux)]“ funktioniert. Stehe ich auf dem Schlauch?

    OpenSUSE Leap 15.5 mit Xfce

    Für den Inhalt des Beitrages 42692 haftet ausdrücklich der jeweilige Autor: Oriel7

  • Danke, das leuchtet mir ein, aber „.*\.log“ im Feld „Dateiname stimmt mit regulärem Ausdruck überein“ findet nichts. Ebenso „\.log“. Versteh ich nicht.


    Im Feld „Name enthält“ müße man gemäß der Anleitung mit [ ] Alternativen angeben können, aber weder „*.[(log)(aux)]“ noch „*.[log aux]“ noch „*.[log aux]“ noch „*.[.log|.aux]“ noch „*.[(.log)|(.aux)]“ funktioniert. Stehe ich auf dem Schlauch?


    In REs bezeichnet das eckige Klammernpaar eine Auswahl.
    [ab] meint also entweder "a" oder "b".
    Dein Term "*.[(log)(aux)] kommt dem schon nahe. Vermtl. wirst du das "(" maskieren müssen.
    Also *.[\(log\)\(aux\)]
    Wie schon gesgt: es gibt sehr viele verschiedenen Dialekte von REs. Und ich kann leider nciht pärzuiser antworten, weil ich noch nie Gnome hatte.


    Was aber sicherlich leichter lesbarer ist wäre mal das hier:
    *.ext1|*.ext2
    Da zumindest in allen mir bekannten RE-Dialketen das Pipesymbol eine Oderierung ist, wsa meist nciht maskiert werden muss.


    Die anderen von dir angegebene Versuche sind teilweise schlicht falsch, teilweise wundert es mich, dasas sie nichts zurückgeben. Sie sollten zwar nicht die "richtigen" Files zurückgeben, sondern wesentlich mehr.
    Wie auch immer.

    Für den Inhalt des Beitrages 42701 haftet ausdrücklich der jeweilige Autor: uhelp

  • Deine Vorschläge bringen alle nichts zurück. Im Suchfeld für reguläre Ausdrücke gibt „.log|.aux“ zu viel aus, nämlich auch Theologie.odt, aber da „\.log“ nichts zurückgibt, weiß ich nicht, wie ich den Punkt maskieren kann.

    OpenSUSE Leap 15.5 mit Xfce

    Für den Inhalt des Beitrages 42703 haftet ausdrücklich der jeweilige Autor: Oriel7

  • Zitat

    Deine Vorschläge bringen alle nichts zurück. Im Suchfeld für reguläre Ausdrücke gibt „.log|.aux“ zu viel aus, nämlich auch Theologie.odt, aber da „\.log“ nichts zurückgibt, weiß ich nicht, wie ich den Punkt maskieren kann.


    Wie gesagt: Es gibt sehr viel RE Dialekte. Der, den Gnome verwendet, scheint etwas weitab von den Hauptrichtungen zu sein.


    Dass er Theologie.odt bei einem Regex von ".log|.aux" ausgibt, lässt darauf schliessen, dass er hier den Punkt tatsächlich als ein Metazeichen ( hier: ein beliebiges Zeichen vor den Buchstaben "log" ) versteht.
    Der Regex sollte dann "\.log|\.aux" heissen.
    Der passt dann auch auf eine Datei namens Theo.logie.odt.
    Um das Ende eines Wortes zu erwischen kannst du den Ausdruck erweitern, falls nach dem Dateinamen immer ein Leerzeichen steht, zu: "\.log |\.aux " (also nach den Endungen noch ein Leerzeichen). Und dabei kann es sein, dass auch die Leerzeichen maskiert werden müssen. Also "\.log\ |\.aux\ "


    Andererseits habe ich hier gefunden, dass dieses seltsame Tool intern "find", "grep" und "locate" verwendet.
    Das finde ich dann etwas sehr verwirrend:

    Code
    # mit find deine Dateien suchen:
    SearchDir='/path/to/root/from/where/search/starts/'
    find $SearchDir -name '*.log' -o -name '*.aux'
    # suche in Searchdir (und allen darunterliegenden Verzeichnissen Dateien mit -name(n) '*.log' 
    # -o  oder
    # mit (-)name(n) '*.aux'
    
    
    # grep tut das gänzlich anders:
    ls -1 * | grep -E -e '*.log' -e '*.aux'


    Der Befehl "locate" setzt eine Datenbank voraus, die auf dem aktuellen Stand ist (Befehl dazu: "updatedb" als root ausgeführt) und findet nur ausführbare Programme. Ist also hier weniger interessant.


    Wenn ich aber mit meiner Vermutung richtig liege, sollte ein einfacher Feldtrenner in diesem eigenartigen Tool auch helfen. Hast du das mal in dem Feld schlicht das probiert:
    *.log, *.aux
    ? (evtl. auch ohne Leerzeichen)


    Nochmal sorry, dass ich dir nicht wirklich helfen kann, aber Gnome ist nun mal nicht mein Ding.

    Für den Inhalt des Beitrages 42704 haftet ausdrücklich der jeweilige Autor: uhelp

  • Hallo,
    wichtig ist, von wo aus du löschen willst und wie tief in der Ordnerstruktur für den find Befehl. Du musst bei regulären Ausdrücken den Punkt escapen, weil der Punkt steht in regulären Ausdrücken für ein beliebiges Zeichen. Der Malpunkt dahinter sagt aus, dass das beliebige kein mal, einmal oder beliebig oft vorkommen kann. Und damit man trotzden nach einem Punkt als Zeichen suchen kann, musst du einen Backslash davor stellen (\).
    Der Strich ( |) steht für eine logische oder Verknüpfung.
    Wenn ich richtig schätze, dann müsste dein Befehl so aussehen:

    Code
    find -iregex ".*\.aux|.*\.blg|.*\.log|.*\.out|.*\.bbl|.*\.nav|.*\.snm|.*\.backup|.*\.tex~|.*\.toc" -maxdepth 999 -exec rm


    Logisch, dass er vorher nichts gefunden hat. Denn z. B. \.aux passt auf ".aux", aber nicht auf z. B. "l.aux". Das ist ein bisschen komisch, die meisten Programme prüfen das Suchmuster für eine ganze Zeile, also nicht nur für Teile. Von der theoretischen Informatik her wäre es aber richtig nur nach dem Suchmuster, also einem Teil der Zeile zu suchen.


    Vorher solltest du dich aber mit Super User Rechten anmelden, um sicherzustellen, dass alle Dateien gelöscht werden. Außerdem ist es empfehlenswert ins Wurzelverzeichnis zu wechseln.


    Für weitere Hilfe zu dem Befehl einfach mal

    Code
    man find

    eingeben. Das bringt dir auf der Konsole Hilfeseiten. Navigieren kannst du mit den Cursor Tasten, bzw. Bild nach oben, Bild nach unten. Und verlassen kannst du die Hilfeseite wieder mit q.
    Deine vorhergehende Option -iname geht wahrscheinlich auch, aber -iregex nimmt sicher einen Regulären Ausdruck entgegen.


    Reguläre Ausdrücke werden aber auch bei Wikipedia schön erklärt.


    MFG derwunner

    Diese Signatur ist derzeit nicht verfügbar.

    Für den Inhalt des Beitrages 42710 haftet ausdrücklich der jeweilige Autor: derwunner

  • Es geht nicht um "find", sondern um das gnome.search-tool.
    Aber egal.


    Was ganz und gar nicht egal ist der Rat als root Löschkommandos mit find zu triggern.
    Das ist ein verdammt schlechter Rat.
    Da hat man schnell etwas gelöscht, was man bitterlich bereut.


    Generell gilt:
    Niemals root, außer es ist unumgänglich.

    Für den Inhalt des Beitrages 42712 haftet ausdrücklich der jeweilige Autor: uhelp