• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] rekursiv kompletten Pfad mit Zugriffsdatum ausgeben

Hi,
tut mir leid, die Frage kommt mir selber etwas blöd vor 'RTFM'... :?
Brauche rekursiv (wie ls -R) alle Dateien aus einem Verzeichnis, aber mit dem kompletten Pfad und dem letzten Zugriffsdatum.
Wie dieses mit awk herauszulösen wäre, ist mir bekannt, aber nicht, wie ich 'ls' dazu bewege, den kompletten Pfad auszuspucken...
tom
 
Vielleicht verstehe ich dich falsch aber..

Code:
ls -l -r -R -t

Optionen

-Alles
-Rekursiv
-Unterverzeichnisse
-letzte Änderung.
 
Ja, das gibt sowas aus wie:
Code:
> ls -l -r -R -t
./DAT/C/SERVER/NOTES_bak:
insgesamt 60
drwxr-xr-x  2 tom users  432 2008-03-08 08:11 Notes
-rw-rw-rw-  1 tom users  153 2008-06-09 20:58 INC.php
ich brauche aber:
Code:
2008-03-08 ./DAT/C/SERVER/NOTES_bak/Notes
2008-06-09 ./DAT/C/SERVER/NOTES_bak/INC.php
...
lässt sich sowas ohne großes rumscripten lösen (evtl mit find)?
tom
 
Wow, dafür müsste man ein neues Kürzel finden: "TYVM" (thank you very much).
Da weiss man mal wieder, warum man an einem Unix-System sitzt... :D
 
Sorry, daß ist nicht korrekt. In der Ausgabe von -printf "%h%f\n" fehlt ein Slash vor dem letzten Verzeichnis.
Code:
-printf "%p\n"
tom
 
Na, dann halt:
Code:
find /home/user/directory -printf "%h/%f\t%a\n"
"... das ist nicht korrekt" ist zwar formal richtig, aber bei dem kleinen Fehler doch etwas übertrieben ...
 
Hst ja recht, aber trotzdem BTW würde ich "-p" vorziehen... :twisted:
Aber ich möchte mich bei Dir entschuldigen (schließlich hast´e mir geholfen, und die Auseinandersetzung mit 'find' war ohnedies überfällig). Also vielen Dank !
PS:
Übermut tut selten gut - habe unvorsichtigerweise den Befehl nur kurz an einem Verzeichnis probiert (ohne besagten Slash), und dann an einem riesen Verzeichnis mit weit über 2000 Audacity-Dateien (ohne irgendeinen Rückhalt):
Code:
for i in `find -printf "%h%f\n"` ; do touch $i ; done`
na bestens, da hatte ich also über 2000 neue, leere Dateien, fein säuberlich über die verschiedensten Verzeichnisse verteilt, produziert.
Und, na klar doch, kraft meiner wie immer allgegenwärtigen, heiligen, einfältigen Unwissenheit mit dem mc von Hand wieder entfernt. 5 Uhr morgens war´s vollbracht. :mrgreen:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Woraus sich folgende Frage ergiebt:
Wie ist es möglich mit 'find' ein bestimmtes Zugriffsdatum herauszufischen?
Ich zitier mal:
-newer Referenzdatei
die Datei ist später verändert worden als die Referenzdatei; zusammen mit `-follow' tritt `-newer' nur in Effekt, wenn `-follow' vor `-newer' in der Kommandozeile steht.
-mmin N
der Inhalt der Datei wurde vor N Minuten verändert
-mtime N
der Inhalt der Datei wurde vor N*24 Stunden verändert

Ok. Was aber, wenn man genau ein bestimmtes Zugriffsdatum herausfischen wollte ?

grüßle,
tom
 
A

Anonymous

Gast
OsunSeyi schrieb:
Ok. Was aber, wenn man genau ein bestimmtes Zugriffsdatum herausfischen wollte ?

Mit den Zeitstempeln ist es nicht ganz so einfach da es mehrere Zeitstempel gibt, die bei verschiedenen Operationen unterschiedlich neu gesetzt werden, auch gibt es Unterschiede zwischen den einzelnen Dateitypen, wo die Zeitstempel zT anders zu interpretieren sind. Du sprichst hier von Veränderung und Zugriffsdatum fast in einem Zusammenhang, die Unterschiede sind aber gravierend. Wenn du dich damit mal etwas beschäftigen möchtest, dann sei dir das hier empfohlen
http://wiki.linux-club.de/opensuse/Zeitstempel_von_Dateien
dort steht dann auch wie das mit find funktioniert und einige Beispiele wie man das anwendet.
http://wiki.linux-club.de/opensuse/Zeitstempel_von_Dateien#Dateien_anhand_er_Zeitstempel_suchen_mit_find

wenn du eine Zeit finden willst, musst du oft mit 2 Werten ein Zeitfenster einrichten.
Code:
find /home -type f -mmin -20 -mmin +15
umfasst zB Änderungen an normalen Dateien innerhalb eines 5 Minuten Fensters. (vor mindestens 15 Minuten aber maximal vor 20
Minuten)

robi
 
Hallo,
na bestens, da hatte ich also über 2000 neue, leere Dateien, fein säuberlich über die verschiedensten Verzeichnisse verteilt, produziert.
Uhh, das ist natürlich total bitter, und es tut mir sehr leid :( ! Da kann ich gut verstehen, wenn Du etwas sauer wirst.
Das Problem wäre ich damit angegangen, die Ausgabe des falschen "find"-Befehls nochmals in eine Datei zu leiten und dann vielleicht mit einem Skript drüberzugehen, so "teste, ob Datei leer ist, und wenn ja, lösche sie".
Jedenfalls nochmals Entschuldigung für diesen blöden Fehler !
Wie ist es möglich mit 'find' ein bestimmtes Zugriffsdatum herauszufischen?
Ob das mit "find" direkt geht, weiß ich nicht, aber Du könntest Perl mit einschalten:
Code:
find /home/user/directory -printf "%p\t%a\n" | perl -e 'while(<>) {@a = split("\t", $_); if ($a[1] =~ "Tue Jun  3 00:25:00 2008") {print $_}}'
Den Zeitstring müßtest Du entsprechend anpassen.

Ich hoffe, diesmal ist meine Antwort hilfreicher.

Viele Grüße
 
Oben