Anzeige:
Ergebnis 1 bis 6 von 6

Thema: shell: aktuellste Datei pro Verzeichnis

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.07.2006
    Beiträge
    7

    Question shell: aktuellste Datei pro Verzeichnis

    Hallo,

    ich habe etwa folgende Verzeichnisstruktur

    project/log/
    project/log/x
    project/log/x/X-bla-1.log
    project/log/x/X-bla-2.log
    ...
    project/log/y
    project/log/y/Y-bla-1.log
    project/log/y/Y-bla-2.log
    ...
    project/log/z
    project/log/z/Z-bla-1.log
    project/log/z/Z-bla-2.log


    und finde mit

    Code:
    find <root-log-Verzeichnis> maxdepth 1 -name *.log -exec grep -i 'error'  {} \;
    in mehreren Verzeichnissen "alle" aufgetretenen Fehler.

    Ich würde die Suche aber gerne auf die jeweils aktuellste Datei pro Verzeichnis beschränken.

    Die Option
    Code:
    -ctime 1
    fällt leider aus, da es mehrere Dateien geben kann, die in den letzten 24 Std. geändert wurden.

    Weiß jemand, wie das geht?
    Es müsste ja gehen mit "sortiere absteigend nach Datum und gib mir das erste Element". Aber ich verwende viel zu selten so detaillierte Shell-Kommandos, um sowas zu wissen :-(

    Hab natürlich schon im Forum gesucht aber nicht genau das gefunden, was ich suche. In folgendem Forenbeitrag geht's leider nur ums Kopieren.

    Schöne Grüße,
    Mayoar

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hallo,
    wie wäre es denn, ein Script zu machen, dass jedes Verzeichnis einzeln prüft und die dort jeweils neuste Datei anzeigt? (also per Schleife)
    Beispiel ohne Schleife:
    Code:
     find /ein-Verz/logverz -maxdepth 1 -name *.log | xargs ls -lt | head -1
    Gibt sicher elegantere Lösungen ...

    Gruss zst

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    Zitat Zitat von zst Beitrag anzeigen
    Hallo,
    wie wäre es denn, ein Script zu machen, dass jedes Verzeichnis einzeln prüft und die dort jeweils neuste Datei anzeigt? (also per Schleife)
    Beispiel ohne Schleife:
    Code:
     find /ein-Verz/logverz -maxdepth 1 -name *.log | xargs ls -lt | head -1
    Gibt sicher elegantere Lösungen ...

    Gruss zst
    lieber so verwenden:

    find /ein-Verz/logverz -maxdepth 1 -name *.log -print0 | xargs -0 ls -lt | head -1

    wegen sonderzeichen in dateinamen

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.07.2006
    Beiträge
    7
    Hallo, danke für die Tipps, aber
    ~/> find log -maxdepth 1 -name *.log -print0 | xargs -0 ls -lt | head -1
    bringt als Ergebnis lediglich
    total 928

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.07.2006
    Beiträge
    7
    Ein Fehler : ich hab die quotes vergessen.

    find log -name '*.log' -print0 | xargs -0 ls -lt
    klappt und sortiert mir alle files dem Änderungsdatum nach.

    Darauf | head -1 angewandt gibt mir aber nur das zuletzt geänderte file aller Verzeichnisse.

    Ich möchte aber gerne pro Verzeichnis das zuletzt geänderte für meine Suche verwenden.

    Was auch gehen würde: Wenn man die Option -mtime granularer gestalten könnte. Also nicht nur die files, die in den letzten 24 Stunden geändert wurden, sondern z.B. die in den letzten 15min geändert wurden o.ä.

    Hat da jemand ne Idee?

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hallo nochmal,
    weil du ja PRO VERZEICHNIS die neuste Datei haben möchtest, schrieb ich:
    ... wie wäre es denn, ein Script zu machen, dass jedes Verzeichnis einzeln prüft und die dort jeweils neuste Datei anzeigt? (also per Schleife) ...
    Das wäre zumindest eine schnelle und greifbare Lösung.

    Wenn du das doch lieber per "find" machen willst, dann schau dir mal diese Option an:
    -mmin N
    der Inhalt der Datei wurde vor N Minuten verändert

    Gruss zst

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •