Dateien über Unterverzeichnisse hinweg nach Datum sortiert

oglimmer

Aktives Mitglied
Thread Starter
Dabei seit
16.11.2004
Beiträge
1.344
Reaktionspunkte
251
Hi,

weiß jemand wie ich im Terminal alle Dateien über Unterverzeichnisse hinweg nach Datum sortiert anzeigen kann.

Ich will nicht Spotlight verwenden, es soll ein im Terminal sein!

Gruß
Oli

(für Dateigröße habe ich das: "du -a | sort -n | tail -n 25", so einfach scheint es mir aber für nach Datum nicht zu sein)
 
Da war ich wohl etwas zu früh mit posten.

Habe das bei Google gefunden und es macht genau das was ich möchte.

Wenn jemand noch kürzere Lösungen hat => her damit.
 
wie wär's mit:

Code:
ls -alTR | awk '{print $9,$6,$7,$8,$10}' | sort


edit: nicht ganz, aber fast :)
 
@oglimmer
ist mit 'nem Einzeiler wohl kaum möglich.
Auch die Lösung von josh targownik (dein Link) liegt knapp daneben ;)
 
Wieso geht denn die Lösung aus dem Link nicht?

Bei meinem Tests hat es eigentlich gut geklappt.

Ich habe diese Lösung getestet:
PHP:
#!/bin/sh 
#no bells&whistles, this just takes ls -l output, reformats it slightly, 
#and sorts the result fron newest to oldest; old files for which ls -l 
#gives year rather than time all show 00:00 time 
# 
ls -lR "$@" | 
awk 'BEGIN { m = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec" 
  "date +%Y" | getline yyyy; close("date +%Y") 
  "date +%b" | getline mmm;  close("date +%b") 
  mi = monthnum(mmm) 
  fmt = "%s %4d %-12s %-12s %12d %4d/%02d/%02d %s %s\n" 
  bfn = "[^ ]+ +[0-9]+ +[^ ]+ +[^ ]+ +[0-9]+ +(" m ") +[0-9]+ +[0-9:]+ +" 

} 

/^total/ || /^ *$/ { next } 
/:$/ { sub(/:$/, "/"); sub("//$", "/") ; d = $0; next } 
{ match($0, bfn); fn = d substr($0, RSTART + RLENGTH) 
  mn = monthnum($6) 
  if (length($8) == 4) 
    printf(fmt, $1, $2, $3, $4, $5, $8, mn, $7, "00:00", fn) 
  else 
    printf(fmt, $1, $2, $3, $4, $5, yyyy-(mn<=mi?0:1), mn, $7, $8, fn) 
} 

function monthnum(s) { return int((index(m, s) + 3) / 4) }' | 
sort -r +5
 
oglimmer schrieb:
Wieso geht denn die Lösung aus dem Link nicht?

Das Skript meinte ich nicht. Ich glaube schon, dass es funzt, werde es auch bei Gelegenheit testen.

Ich dachte an den Einzeiler, der im letzten Post von josh targownik vorgeschlagen wurde:

Code:
ls -l `find .|xargs` | cut -c43-200 | sort -Mr | more

man versucht ja oft, erst mal per Einzeiler das gesuchte Ergebnis zu erhalten, bevor man zu anderen Mitteln greift ;)
 
Ganz schön umständlich :D.
[Edit:] bezog sich auf #5

Mal abgesehen davon, dass Du nicht angegeben hast, welches Datum Du meinst (Erstellung, letzte Änderung, letzter Zugriff).
Ich geh' mal davon aus, Du meinst das Datum der letzten Änderung.
In der zsh geht dann z.B. sowas:
Code:
stat -f "%m%t%Sm %N" **/* | sort -rn | cut -f2-
 
that's it
maceis hat doch immer 'ne coole Lösung parat.
:D
 
Ich dachte an das "letzte Änderungsdatum".

Ich habe jetzt die Lösung Maceis probiert, aber ich bekomme (für einen Verzeichnisbaum mit 10 Dateien und 1 Unterverzeichns) nur eine Zeile zurück. Mache ich was falsch?

Aber cool, das Programm stat kannte ich gar nicht.
 
Zuletzt bearbeitet:
stimmt, wer lesen kann ist klar im Vorteil ;)
 
zsh rulez :upten:.
In der bash geht aber folgendes:
Code:
find . -exec stat -f "%m%t%Sm %N" {} \; | sort -rn | cut -f2-
 
Damit geht der Shell-Award des Tages an Maceis

**applaus**

Super, das ist die Lösung die mir wirklich gefällt. Man kann dann vorallem so schön dem find ein -type f dazu geben.
 
oglimmer schrieb:
...
Man kann dann vorallem so schön dem find ein -type f dazu geben.
Das kann die zsh ohne 'find' Kommando (und einfacher):
Code:
stat -f "%m%t%Sm %N" **/*(.) | sort -rn | cut -f2-
:D
 
Man sieht ich habe von ksh keine Ahnung....

(und auch an der bash ist mein Wissen beschränkt, aber für den Hausgebrauch reichts ;) )
 
Zurück
Oben Unten