Discussion:
ls und sortieren nach datum
(zu alt für eine Antwort)
Michael Steinböck
2004-01-10 09:04:42 UTC
Permalink
Hi!
Ich hab mir ein Backupscript gemacht, das die "neuesten" Daten
zusammenklaubt und eine CD brennt; geht wunderbar mit Suse-Linuxen ab 8 und
dem dort vorhandenen ls; auf einem Rechner mit 7.2er Version finde ich
leider nur ein ls ohne die Option --time-style=full-iso vor, und die brauch
ich, um die Dateien nachher entsprechend zu sortieren ...
Wie könnte (ohne die --time-style ... Option) man alle Dateien (vorgefunden
in einer Liste von zu untersuchenden Verzeichnissen) absteigend nach dem
letzten Modifikationsdatum oder Erstellungsdatum sortieren und die
vollständigenPfad/Dateinamen in dieser Reihenfolge ausgeben?
Derzeit mach ich
find $BACKUP -type f -exec ls -l --time=ctime --time-style=full-iso {} \;
mit nachfolgendem
sort --key=6,7 --reverse

Michael
Alexander Bartolich
2004-01-10 10:21:27 UTC
Permalink
Post by Michael Steinböck
Derzeit mach ich
find $BACKUP -type f -exec ls -l --time=ctime --time-style=full-iso {} \;
-exec ist böse. Wenn dann

find $BACKUP -type f | xargs ls ...

bzw.

find $BACKUP -type f -print0 | xargs -r0 ls ...

Egal. Wenn ich dein Posting richtig verstehe, baust du das ganze
nur, um dann alle Dateien nach einer bestimmten Zeile zu verwerfen,
die Ausgabe des Datums an sich ist unwichtig.

Gibt es dann für --ctime einen besonderen Grund? Das setzt voraus,
das Dateien niemals direkt berabeitet, sondern immer in einem
Rutsch neu geschrieben werden.

Egal. Dann einmal ein lustiger Teil von "man ls":

# --time-style=STYLE
# show times using style STYLE: full-iso, long-iso, iso, locale,
# +FORMAT
#
# FORMAT is interpreted like `date'; if FORMAT is FORMAT1<new-
# line>FORMAT2, FORMAT1 applies to non-recent files and FORMAT2 to
# recent files; if STYLE is prefixed with `posix-', STYLE takes
# effect only outside the POSIX locale
#
# -t sort by modification time

Hat das irgendeinen besonderen Grund, warum du die Option nach
'--time-style' nicht gesehen hast?

Vielleicht, weil du ja unbedingt nach ctime statt nach mtime
sortieren willst?

# -c with -lt: sort by, and show, ctime (time of last modification of
# file status information) with -l: show ctime and sort by name
# otherwise: sort by ctime

Die erste Annäherung sieht dann so aus:

find . -type f | xargs ls -clt

Aber RTFM ist noch nicht erschöpft.

man find
# -ctime n
# File's status was last changed n*24 hours ago.

Um zum Beispiel alle Dateien des letzten Tages zu finden:

find . -type f -ctime 1
--
Für Google, Tux und GPL!
Michael Steinböck
2004-01-10 15:53:27 UTC
Permalink
zuerest schrieb ich
Post by Alexander Bartolich
Post by Michael Steinböck
auf einem Rechner mit 7.2er Version finde ich
leider nur ein ls ohne die Option --time-style=full-iso vor,
Hat das irgendeinen besonderen Grund, warum du die Option nach
'--time-style' nicht gesehen hast?
doch, ich hab, aber im 7.2er gibts die eben nicht. Leider.
Post by Alexander Bartolich
Vielleicht, weil du ja unbedingt nach ctime statt nach mtime
sortieren willst?
he, Alexander, ich bin nicht blöd; ich such nur eine möglichkeit, ohne
die obige option die gefundenen (=alle dateien der verzeichnisse) nach
ctime oder mtime absteigend zu sortieren.
ich such alle dateien, sortiere sie nach dem datum absteigend, und zippe
dann eine nach der anderen, biss meine (eine) cd voll ist. Vereinfacht
gesprochen. Alle Dateien des letzten Tages, der letzte Woche etc zu
sichern hat immer den Nachteil, daß der Fall auftritt, das dies mehr als
eine (Sicherungseinheit) benötigt, deshalb ...

Bitte - ich such die Sortier-möglichkeit immer noch ...

Michael
Gerald Pfeifer
2004-01-10 17:40:39 UTC
Permalink
Post by Michael Steinböck
Post by Alexander Bartolich
Hat das irgendeinen besonderen Grund, warum du die Option nach
'--time-style' nicht gesehen hast?
doch, ich hab, aber im 7.2er gibts die eben nicht. Leider.
Alexander hat sich auf -t bezogen, glaube ich, und die gibt's schon
"immer."
Post by Michael Steinböck
Bitte - ich such die Sortier-möglichkeit immer noch ...
Was du natuerlich auch machen koenntest (ausser das System upzudaten,
was ich alleine aus Security-Gruenden tun wuerde, falls das Ding am
Netz haengt), ist ein aktuelles ls selbst zu kompilieren und dann zu
verwenden.

(Das Package heisst coreutils, ich glaube auch upstream bei GNU.)

Gerald
--
Gerald "Jerry" ***@dbai.tuwien.ac.at http://www.pfeifer.com/gerald/
Disclaimer: Managing projects at, not speaking for, SUSE.
Michael Steinböck
2004-01-10 21:13:02 UTC
Permalink
Post by Gerald Pfeifer
Was du natuerlich auch machen koenntest (ausser das System upzudaten,
was ich alleine aus Security-Gruenden tun wuerde
.. möchte mich dem Stress nicht aussetzen, was dann alles nicht mehr
geht; ausserdem hängts eh nich am netz ...
Post by Gerald Pfeifer
ist ein aktuelles ls selbst zu kompilieren und dann zu
ja, das wär möglich ... ich befürcht aber, das kann ich nicht.

Michael
Alexander Bartolich
2004-01-10 19:22:11 UTC
Permalink
Post by Michael Steinböck
Bitte - ich such die Sortier-möglichkeit immer noch ...
Wer lesen kann ist im Vorteil. Also noch einmal:

find . -type f | xargs ls -clt
--
Für Google, Tux und GPL!
Michael Steinböck
2004-01-10 20:42:49 UTC
Permalink
Post by Alexander Bartolich
find . -type f | xargs ls -clt
Das Statement ergibt (jedenfalls auf meinen Rechner(n)) keine sortierte
Liste; auf einem aktuellen Rechner kann man es leicht um --full-time
erweitern, dann sieht man's besser. Leider.

Michael
Alexander Bartolich
2004-01-10 21:18:18 UTC
Permalink
Post by Michael Steinböck
Das Statement ergibt (jedenfalls auf meinen Rechner(n)) keine
sortierte Liste;
Mhh. Ja, Denkfehler auf meiner Seite. Der Sinn von xargs besteht
darin, dass Zielprogramm mit der längst-möglichen Kommandozeile
so selten wie möglich aufzurufen. Für zu kleine Testdaten ist
bedeutet das genau einmal, beim allgemeinen Fall erhält man nur
nicht-totale Sortierung.
Post by Michael Steinböck
[...] dann sieht man's besser. Leider.
Ohne Fehlerberichte keine Verbesserung.
Da es dir nur um die Sortierung geht:

find . -type f -printf '%C@ %p\n' | sort -n
--
Für Google, Tux und GPL!
Michael Steinböck
2004-01-10 23:19:59 UTC
Permalink
Post by Alexander Bartolich
Ohne Fehlerberichte keine Verbesserung.
... wie unten steht: doch ... und herzl. Dank.
ps - ich durchschau auch nicht _genau_, wie unsortiert die liste aus
find $irgendwo -type f | xargs ls -lct
ist. offenbar wird das ls halt ein paarmal aufgerufen, und beginnt
jedesmal / bei jedem aufruf mit einer neuen, in sich richtigen
sortierung ... alles zusammen ist halt weniger richtig ;-)

Peter J. Holzer
2004-01-10 21:45:21 UTC
Permalink
Post by Michael Steinböck
Post by Alexander Bartolich
find . -type f | xargs ls -clt
Das Statement ergibt (jedenfalls auf meinen Rechner(n)) keine sortierte
Liste;
Kann es natürlich auch nicht, außer für sehr kurze Listen (xargs
verleitet leider zu solchen Fehlschlüssen, weil die Sonderfälle beim
Testen oft nicht auftreten).

Ich habe ein paar Scripts namens fnp (find'n'print), fnpa (find'n'print
atime) und fnpc (find'n'print ctime), die sortierbaren find-Output
erzeugen. fnpc sieht so aus:

---8<------8<------8<------8<------8<------8<------8<------8<---
#!/bin/sh
/usr/bin/find "$@" -printf "%CY-%Cm-%Cd %CH:%CM:%CS %5k %-8u %-8g %m %p\t%l\n"
---8<------8<------8<------8<------8<------8<------8<------8<---

die anderen beiden kann man sich dann vorstellen. (-printf ist eine
Extension von GNU find)

fnpc . -type f | sort

gibt alle Files nach ctime sortiert aus, aber natürlich mit den ganzen
anderen Daten. Die kann man aber leicht mit cut wegschneiden, denn die
Breite ist konstant.

hp
--
_ | Peter J. Holzer | In this vale
|_|_) | Sysadmin WSR | Of toil and sin
| | | ***@hjp.at | Your head grows bald
__/ | http://www.hjp.at/ | But not your chin. -- Burma Shave
Loading...