Löschen nach Alter | atime / mtime / ctime

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.555
Punkte für Reaktionen
1.394
Punkte
234
Hallo!

Ich habe einen gemeinsamen Ordner, den ich als Dateimüllkippe verwende. Das wären z.B. mal schnelle Uploads vom Handy auf das NAS um ein Foto zu bearbeiten, quick&dirty... dabei "vergisst" man gerne mal diese Dateien.

Nun möchte ich regelmäßig ein Script laufen lassen, welches diesen Ordner kontrolliert und alle Dateien, die älter als 365 Tage sind, löschen. Das Script ist fertig, im Grunde ein Einzeiler mit find.

Unschlüssig bin ich mir bei der Auswahl vom Alter, da es drei verschiedene Zeiten gibt.
atime (Access-Stempel)
mtime (Modification-Stempel)
ctime (Change- oder Creation-Stempel)

Beispiel:
Code:
Filename : testdatei12.jpg
atime    : 2020-12-12 17:34:47.172285525 +0100
mtime    : 2008-02-02 16:28:32.000000000 +0100
ctime    : 2020-12-12 16:57:37.820513823 +0100

mtime fällt raus, da ältere Dateien sofort gelöscht werden würden.
Nun bleibt nur noch atime und ctime. Im Moment tendiere ich zu atime, da eine ins Verzeichnis kopierte Datei wohl dieses Datum erhält, sowie bei einem Zugriff z.B. drei Tage später dieses Datum erneuert wird. Das würde sicherstellen, dass wirklich nur Dateien gelöscht werden, die seit 365 Tagen nicht angefasst wurden.

Beispiel:
Code:
Filename : testdatei34.jpg
atime    : 2020-12-13 16:56:59.345184400 +0100
mtime    : 2020-12-03 16:56:24.727728200 +0100
ctime    : 2020-12-10 18:30:05.588095446 +0100

Bin ich auf dem richtigen Pfad?
Oder habe ich einen Denkfehler?
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54
Interessante Frage. Hier hat jemand auch schon die Frage gestellt.

atime is last accessed time, mtime the last modified time (when you changed the content of the file), ctime is the change time, i.e. the last time the inode for that file has been changed (e.g. you changed permissions, or renamed the file).
Daraus schliesse ich die mtime ist die richtige die Du benutzen solltest.
 
  • Like
Reaktionen: peterhoffmann

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.555
Punkte für Reaktionen
1.394
Punkte
234
mtime ist die richtige die Du benutzen solltest.
Warum?

Ich habe mtime ausgeschlossen, weil sie nur bei einer Modifizierung aktualisiert wird. Wenn ich also eine ältere Datei dorthin kopiere, würde sie beim nächsten Scriptdurchlauf sofort gelöscht werden (siehe Beispiel testdatei12.jpg).

Code:
Filename : testdatei12.jpg
atime    : 2020-12-12 17:34:47.172285525 +0100
mtime    : 2008-02-02 16:28:32.000000000 +0100
ctime    : 2020-12-12 16:57:37.820513823 +0100
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Es wundert mich etwas, dass mtime älter als ctime sein sollte :unsure: Muss ich mal testen.

Edit: Hast du dir das mal mit "stat <dateiname>" angeschaut. oder woher stammen deine Ausgaben?
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peterhoffmann

stefan_lx

Benutzer
Mitglied seit
09. Okt 2009
Beiträge
2.766
Punkte für Reaktionen
73
Punkte
88
wenn eine Datei mit der FileStation auf die Syno gelegt wird, ist mtime das Original-Datum der Datei, ctime und atime ändern sich auf das aktuelle Datum (jedenfalls war das bei mir gerade so und die Uhrzeiten unterscheiden sich nur irgendwo bei den Hundertstelsekunden)

für Peter ist atime dann wohl richtig

Stefan
 
  • Like
Reaktionen: peterhoffmann

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.555
Punkte für Reaktionen
1.394
Punkte
234

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Ich hab mal folgendes getestet:
Code:
root@DS415:~# touch xxx
root@DS415:~# stat xxx
  File: ‘xxx’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 900h/2304d      Inode: 24420       Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-12-13 20:03:05.333287183 +0100
Modify: 2020-12-13 20:03:05.333287183 +0100
Change: 2020-12-13 20:03:05.333287183 +0100
 Birth: -
root@DS415:~# chmod 777 xxx
root@DS415:~# stat xxx
  File: ‘xxx’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 900h/2304d      Inode: 24420       Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-12-13 20:03:05.333287183 +0100
Modify: 2020-12-13 20:03:05.333287183 +0100
Change: 2020-12-13 20:03:23.873084638 +0100
 Birth: -
root@DS415:~# vi xxx
root@DS415:~# stat xxx
  File: ‘xxx’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 900h/2304d      Inode: 24420       Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-12-13 20:03:48.581814709 +0100
Modify: 2020-12-13 20:03:52.011777240 +0100
Change: 2020-12-13 20:03:52.052776792 +0100
 Birth: -
root@DS415:~# vi xxx
root@DS415:~# stat xxx
  File: ‘xxx’
  Size: 3               Blocks: 8          IO Block: 4096   regular file
Device: 900h/2304d      Inode: 24420       Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-12-13 20:09:02.562386211 +0100
Modify: 2020-12-13 20:09:09.271312983 +0100
Change: 2020-12-13 20:09:09.321312438 +0100
 Birth: -
Anfangs sind also alle Zeiten gleich. Ändern sich Attribute, ändert sich ctime. Beim editieren ändert sich atime beim Öffnen und mtime gefolgt von ctime beim Speichern.
So, nun such dir etwas aus, was du unter "Alter" verstehst. Vermutlich ist ctime sinnvoll.
 
  • Like
Reaktionen: peterhoffmann

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Vermutlich ist ctime sinnvoll.
In meinem Fall verwende ich auch den Zeitstempel "ctime". Aber was Sinn ergibt hängt sicher vom jeweiligen Anwendungsfall ab.
Aus dem Beitrag und der Fragestellung von @peterhoffmann würde ich aus meiner Sicht ctime verwenden.

Hier wie schon erwähnt aus dem Link zuvor eine Übersichtsmatrix zu den wesentlichen Unterschieden atime/mtime/ctime:

Quelle
atime-mtime-ctime_difference.png
 
  • Like
Reaktionen: peterhoffmann

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.555
Punkte für Reaktionen
1.394
Punkte
234
mtime werde ich nicht nehmen.
Im Moment bin ich mir bei c oder a noch nicht sicher. Mein Testlauf läuft im Moment auf a-time. Das beobachte ich mal ein paar Tage, da ich die Zeiten je nach Größe auf 1, 2, 3 oder 4 Tage runtergesetzt habe.

Vielen Dank für eure Sicht- und Hinweise. Auch der Test, sowie die schöne Tabelle machen es mir leichter.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.215
Punkte für Reaktionen
509
Punkte
174
Mein Trigger ist 'mtime' und damit bin ich sehr zufrieden.
 

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.555
Punkte für Reaktionen
1.394
Punkte
234


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat