6

Linux: Rekursiv Unterordner nach Zugriff durchsuchen

Posted by Thorsten on 7. August 2013 in Allgemein, bash, linux, Ubuntu, UPlanet |

Gestern hatte ich mit einem Fehler auf einem Linuxsystem zu kämpfen den ich nicht so richtig einordnen konnte. Ich war mir aber sicher das der Fehler unter /var/log mitprotokolliert wird. Nur wo…?

Oftmals lass ich mir die letzten Zugriffe auf /var/log mit folgendem Befehl anzeigen:

ls -ltr

Dabei steht -t für sortieren nach Zugriffszeit und -r für reverse, also in umgekehrter Reihenfolge so das der letzte Zugriffszeitpunkt unten angezeigt wird wo ich auch meinen Prompt vorfinde.

Wenn ich allerdings mehrere Unterordner nach dem letzten Zugriffszeitpunkt durchsuchen möchte klappt das nicht so richtig und auch die Option -R (rekursiv alle Unterordner durchsuchen) zeigt mir immer nur Ordnerweise die letzten Zugriffszeitpunkte an.

Da meine Applikation aber in mehrere Verzeichnisse protokolliert wollte ich von mehreren Unterverzeichnissen die Datei mit dem letzten Zugriffszeitpunkt. Mein Kollege (danke an dieser Stelle an Dirk) half mir hier etwas auf die Sprünge. Er stellte folgenden find Befehl zusammen:

find -type f -exec ls -t --full-time '{}' \; | cut -d " " -f 6- | sort

Super Ding!

Kennt jemand ne Alternative? Wir sind für Verbesserungsvorschläge dankbar…

Schlagwörter: , , ,

6 Comments

  • wenzo sagt:

    Eine Alternative, nicht unbedingt besser, bei mir aber etwas schneller:

    ls -Rlt | sed '/-/!d' | sort -k7M,7M -k6,8

    Die Syntax von sort ist auch nicht unbedingt selbsterklärend

  • Tomboy sagt:

    Du könntest jetzt in Home unter bin ein script namens ls anlegen, alle parameter auf das echte ls durchleiten und einen eigenen definieren der abgefangen wird und dir dann den umständlichen Befehl ausführt und diese Ausgabe macht.

    Oder einen Feature Request an die LS Programierer schreiben und nach der Funktion fragen

  • Tom sagt:

    Etwas einfacher geht es so (für die Files der letzten 24 Stunden):
    ls -ltr $(find -type f -mtime -1)

    Wenn das Ergebnis zu viele Files liefern sollte, dann kürze einfach die Ausgabe:
    ls -ltr $(find -type f -mtime -1) | tail -20

  • Thorsten sagt:

    Hi,
    vielen Dank für die Vorschläge. Vor allem gefällt mir die Command Substition von Tom was deutlich weniger Aufwand für das OS bedeutet.
    Wenn man das -mtime -1 weglässt werden auch alle Dateien angezeigt…

    cookie für Tom 🙂


  • find -type f -printf '%T+ %P\n'|sort

  • The Compiler sagt:

    Florians Variante mit schöneren Zeiten (Epoch wird zur Sortierung benutzt und dann weggeschnitten):

    find -type f -printf '%T@ %Tc %P\n'| sort | cut -d' ' -f 1-

    Ev. wird sogar in irgendwelchen corner-cases falsch sortiert, wenn man nach Zeit/Datum sortiert, aber ich bin grad noch zu müde, um darüber nachzudenken.

    Einige Kommentare:
    ls zu parsen ist immer eine schlechte Idee, da die Ausgabe je nach OS anders sein kann. stat mit --printf zu nutzen, ist meistens einfacher und portabler
    – wenzo: Deine Variante würde Files nicht anzeigen, die 777 sind und sticky/suid bit gesetzt haben 😛 Gut, unwahrscheinlich.
    – Tom: das wird sowas von kaputt gehen, sobald ein Filename ein Leerzeichen drin hat 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Copyright © 2009-2017 linux-voodoo.de All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.4, from BuyNowShop.com.