[linux-l] Dateien finden, die genau am Tag YYYY-MM-DD veraendert wurden

Sven Guckes maillist-belug at guckes.net
Mi Mai 9 04:35:33 CEST 2007


das folgende problem ist hier neulich
beim config weekend liegengeblieben:

aufgabe:
auffinden und ausgabe aller dateien,
die am tag YYYY-MM-DD veraendert wurden.

nehmen wir an es handele sich dabei um
regulaere dateien und die aenderungszeit
ist zwischen 00:00:00 und 23:59:59 des
angegeben tages auf der lokalen maschine und
es bei aenderungen die "change time" gemeint.

natuerlich waere es fein, wenn man ein standard tool
wie "find" damit beauftragen koennte, weil man
davon ausgehen kann, dass es installiert ist.

allerdings bietet "find" keine option zur angabe des
tages und der uhrzeit, sondern nur diese optionen:

  -atime n
  -ctime n
  -mtime n

diese beziehen sich auf die zeit des letzten zugriffs
(a = access), der aenderung des status (c = change)
bzw der aenderung des inhalts (m = modification).
http://doc.novsu.ac.ru/oreilly/unix/upt/ch16_05.htm

die zeiten access, change, bzw modifikationszeit
wirkt dann ueber einen parameter N als "N*24 stunden",
also fuer ganze tagesbloecke - allerdings in bezug
auf die aktuelle uhrzeit, nicht auf den tagesbeginn.

mithilfe der option "-daystart" wird die bezugszeit
auf den aktuellen tagesstart gesetzt, so dass wir
dadurch wirklich den gesmaten tag zwischen
0uhr und 24uhr bezeichnen koennen.  dieses
teilproblem waere also schonmal geloest.

nur muss man dann den abstand zwischen heute und
des angegebenen datum YYYY-MM-DD selber berechnen,
damit man das geeignete N auch benutzen kann.

und genau da ist der eigentliche haken an der sache:
natuerlich kann man dies ueber eine funktion berechnen
lassen - aber die direkte angabe des datum waere einfacher.

nun habe ich ein paar minuten damit herumgespielt
und bin schliesslich darauf gekommen, um dateien zu finden,
deren "modification time" bis zu drei tage alt ist.

  $ ls -tl `find -daystart -maxdepth 1 -type f -mtime -3 ` | less

das "-maxpdepth 1" beschraenkt die suche erstmal
auf das aktuelle verzeichnis - das reicht schon.
(diese option sollte noch vor dem "-type f"
fuer "nur regulaere dateien" stehen,
weil "find" sonst eine warnung ausspuckt.)
und "less" faengt die ausgabe dann auf.

das ganze ist ja schonmal ganz brauchbar - aber
es passt nicht ganz auf das gegebene problem.

wie beschraenkt man das ganze auf jene dateien,
die *nur* am drittletzten tag veraendert wurden?

ausserdem: die folgende syntax
empfaende ich als viel angenehmer:

  $ myfind $DATUM
  $ myfind YYYY-MM-DD
  $ myfind "DD MM YYYY"

natuerlich kann man jene syntax ueber
eine funktion oder ein script erreichen.
aber habt ihr vorschlaege wie man das datum geeignet
in das format fuer "find" bekommen kann?

gibt es das vielleicht schon?  suche ich da
nach einem anderen tool, das es laengst gibt,
aber das ich vielleicht noch gar nicht kenne?

Sven



Mehr Informationen über die Mailingliste linux-l