Listet Datei + Verzeichnispfad rekursiv sortiert nach Zugriffszeit auf

Listet Datei + Verzeichnispfad rekursiv sortiert nach Zugriffszeit auf

Ich arbeite an einem LRU-Skript, habe aber nach 20 Stunden Arbeit ein Problem mit dem rekursiven Modus, das ich nicht beheben kann.

Ich brauche nur einen Befehl, der mir nach Zugriffszeit sortierte Dateien anzeigt (--time=atime); ich möchte auch die Tiefe verwalten, aber wenn das nicht geht, ist das auch in Ordnung.

  • Hauptverzeichnis:
    • Datei 1
    • Verzeichnis 1:
      • Datei 1
      • Datei2
      • Unterverzeichnis 1:
        • Datei1
        • Datei 2
    • Verzeichnis 2:
      • Datei 1
      • Datei 2
      • Unterverzeichnis 2:
        • Datei 1
        • Datei 2
        • Unterverzeichnis 3:
          • Datei 1

Ich möchte das Verzeichnis ausschließen und die Dateien nur nach Zugriffszeit sortieren lassen

wie

/Hauptverzeichnis/Verzeichnis 1/Datei 1

/Hauptverzeichnis/Datei 1

/Hauptverzeichnis/Verzeichnis 1/Unterverzeichnis 1/Datei 2

/Hauptverzeichnis/Verzeichnis 2/Unterverzeichnis 2/Unterverzeichnis 3/Datei 1

usw..

Antwort1

Es gibt sechs sehr häufig verwendete Tools zur Lösung ähnlicher Probleme:

  • find, um nach Dateien oder Verzeichnissen zu suchen, die bestimmten Einträgen entsprechen.

    Die Optionen -mindepthund -maxdepthsteuern, wie tief im Dateisystembaum (relativ zu den angegebenen Namen, die sich immer auf der Tiefe 0 befinden) der Befehl arbeitet.

    Die -typeOption ist nützlich, um die Berücksichtigung auf Dateien, Verzeichnisse, symbolische Links oder Geräte zu beschränken.

    Diese -printfOption ist äußerst nützlich, da sie den Befehl veranlasst, die Informationen zu den übereinstimmenden Namen (Verzeichniselementen) im gewünschten Format auszudrucken. Besonders gut gefällt mir %TY%Tm%Td %TT %p\n, das Datum und Uhrzeit der letzten Änderung sowie den vollständigen Pfad und Namen jeder Übereinstimmung in jeder Zeile im Format ausgibt YYYYMMDD HH:MM:SS.sss PATH. Dieses Format sortiert nämlich richtig. Verwenden Sie für den letzten Zugriff , %AY%Am%Ad %AT %p\nbeachten Sie jedoch, dass Zugriffszeitstempel überhaupt nicht aufgezeichnet werden, wenn noatimedie Mount-Option verwendet wird, oder dass bei relatimeVerwendung der Mount-Option Zugriffszeitstempel nur für den ersten Zugriff nach einer Änderung geändert werden; die Prüfung auf zuletzt verwendete Datei ist daher nicht zuverlässig. (Die Liste der zuletzt geänderten Dateien ist jedoch ziemlich zuverlässig; die Benutzer können die Zeitstempel manuell ändern, ansonsten werden sie jedoch automatisch verwaltet.)

  • sortum die Ausgabe zu sortieren.

    Die Optionen -d, -g, -h, -M, und -ndefinieren, wie Elemente verglichen werden, und die -ROption legt die Reihenfolge nach dem Zufallsprinzip fest.

    Mit dieser -rOption kann die Sortierreihenfolge umgekehrt werden (zusätzlich zu einer der obigen Optionen).

    Die -tOption definiert neu, wie Felder (Spalten) definiert werden; standardmäßig werden Spalten durch Leerzeichen (Leerzeichen und Tabulatoren) getrennt.

    Mit der -kOption kann festgelegt werden, welcher Teil jeder Zeile als Sortierschlüssel betrachtet wird, standardmäßig wird die gesamte Zeile berücksichtigt.

  • uniqwird häufig nach dem Sortieren verwendet, um mehrere aufeinanderfolgende Elemente zu einem zusammenzufassen, sodass nur die eindeutigen Zeilen ausgegeben werden.

  • cutist die einfachste Möglichkeit, aus jeder Zeile der Ausgabe nur bestimmte Spalten auszuwählen.

    Mit dieser -fOption können Sie die zu druckenden Felder auswählen. (Standardmäßig werden Zeilen mit höchstens einem Feld (ohne Trennzeichen) gedruckt. Mit dieser Option -skönnen Sie das Drucken solcher Zeilen unterdrücken.)

    Mit der -dOption lässt sich die Definition eines Feldes neu festlegen, standardmäßig werden Felder durch Leerzeichen getrennt.

  • sedist ein leistungsstarker Stream-Editor, derReguläre Ausdrückeauf die Eingabe, um sie nach Bedarf zu filtern und zu ändern.

  • awkist ein Interpreter für die Sprache awk. Awk-Skripte sind im Grunde Sammlungen vonAktionen, Code-Schnipsel, die für jede Zeile ausgeführt werden (oder vor oder nach der gesamten Verarbeitung oder wenn die Zeile (oder der Datensatz) einer bestimmten Regel entspricht).

Dieses spezielle Problem kann durch die Verwendung von drei der oben genannten Befehle in einer einfachen Pipeline gelöst werden: Verwenden Sie , findum Dateien in den gewünschten Tiefen des Baums zu finden, und drucken Sie für jede Datei ein sortierbares Datum und eine sortierbare Uhrzeit sowie den relativen Pfad zur Datei. Sortieren Sie die Ausgabe. Entfernen Sie den Datums- und Uhrzeitteil jeder Zeile, sodass in jeder Zeile nur der relative Pfad zu jeder Datei übrig bleibt.

Antwort2

Die mit Abstand einfachste Methode ist die Verwendungzsh. Es istGlob-Qualifikationkann Dateien anhand ihres Typs, Zeitstempels und anderer Eigenschaften zuordnen und sortieren.

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

Der erste Befehl gibt die Namen der regulären Dateien ( .) im aktuellen Verzeichnis aus, einschließlich der Punktdateien ( D), sortiert nach Zugriffszeit ( oa). Der zweite Befehl listet Dateien im aktuellen Verzeichnis und in seinen Unterverzeichnissen rekursiv auf.

verwandte Informationen