it-swarm.com.de

Wie zeige ich im Linux-Terminal das Datum der letzten Änderung des Ordners unter Berücksichtigung seines Inhalts an?

Also hier ist der Deal. Nehmen wir an, ich habe ein Verzeichnis mit dem Namen "web"

$ ls -la

drwx------  4 rimmer rimmer 4096 2010-11-18 06:02 web

ABER in diesem Verzeichnis, web/php /

$ ls -la

-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php

Das heißt, obwohl der Inhalt meines Verzeichnisses /web/php/index.php zuletzt am 05.01.2011 geändert wurde, wird das Verzeichnis/web/selbst zuletzt am 18.11.2010 gemeldet.

Ich muss lediglich das letzte Änderungsdatum meines/web/-Verzeichnisses rekursiv als das letzte Änderungsdatum einer Datei/eines Verzeichnisses in diesem Verzeichnis angeben.

Wie mache ich das?

58

So etwas wie:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
     sort -n -r | 
     head -n 1

Erläuterung:

  • der Befehl find gibt die Änderungszeit für jede Datei aus, wobei Verzeichnisse rekursiv ignoriert werden (gemäß dem Kommentar von IQAndreas können Sie sich nicht auf die Zeitstempel der Ordner verlassen).
  • sort -n (numerisch) -r (rückwärts)
  • head -n 1: Hole den ersten Eintrag
50
Paulo Scardine

Wenn Sie eine Version von find haben (wie zB GNU find), die -printf dann muss stat nicht mehrmals aufgerufen werden:

find /some/dir -printf "%T+\n" | sort -nr | head -n 1

oder

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1

Wenn Sie jedoch keine Rekursion benötigen:

stat --printf="%y\n" *
19

Wenn ich könnte, würde ich für die Antwort von Paulo stimmen. Ich habe es getestet und das Konzept verstanden. Ich kann bestätigen, dass es funktioniert. Der Befehl find kann viele Parameter ausgeben. Fügen Sie beispielsweise der --printf - Klausel Folgendes hinzu:

%a for attributes in the octal format
%n for the file name including a complete path

Beispiel:

find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file

Lassen Sie mich auch diese Frage stellen: Möchte der Autor dieser Frage sein Problem mit Bash oder PHP lösen? Das sollte angegeben werden.

6
Martian