Dateien nach Uhrzeit löschen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Weiteres Problem:
Wenn im Dateinamen ein Leerzeichen ist, wird er durch den Printbefehl ($3) abgeschnitten.
 
und/oder-Problem:
oder => bei Fällen, wo es über 0 Uhr geht
und => bei Fällen, wo das nicht der Fall ist.
 
  • Like
Reaktionen: Benares und geimist
Ihr habt natürlich recht, weil sich der Zeitraum über Mitternacht zieht. Beim Zeitraum innerhalb eines Tages müsste man mit && (und) arbeiten. Das entsprach meinem Test.
 
Zuletzt bearbeitet:
Weiteres Problem:
Wenn im Dateinamen ein Leerzeichen ist, wird er durch den Printbefehl ($3) abgeschnitten.
Gut beobachtet. Das kann man mit einem anderen Trennzeichen umgehen. Z.B. mit einer Tilde (die ja wahrscheinlich nicht im Pfad vorhanden sein sollte):
Bash:
find "/volume3/dein/Pfad" -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "20:00" || $2 <= "06:00" {print $3}'  | xargs rm
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peterhoffmann
Super Forum! Danke!! Die Dateien , die zwischen 22 Uhr und 6 Uhr entstanden sind, sind Quatsch, weil da nienmand arbeitete. Es beträfe also den Erstellungsschalter. genau, das datum ist egal, es gilt der Zeitraum.
 
anderen Trennzeichen
Ich war schon am schauen, den Printbefehl zu pimpen. Anderes Trennzeichen klappt natürlich will einfacher. ;-)

Um es für die Nachwelt kompakt und übersichtlich festzuhalten, hier die fertige Lösung:

Zeitraum über Mitternacht:
Bash:
find /VERZEICHNIS -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "20:00" && $2 <= "06:00" {print $3}' | xargs rm
Zeitraum ohne Mitternacht:
Bash:
find /VERZEICHNIS -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "20:00" || $2 <= "06:00" {print $3}' | xargs rm
(Achtung! Löschbefehl (xargs rm) hängt schon am Ende!)
 
Das kann man mit einem anderen Trennzeichen umgehen. Z.B. mit einer Tilde
Gut Idee. Kommt dann aber xargs damit klar, wenn es z.B. eine Datei mit Namen "A B" rüber geblasen bekommt? Wird da nicht ein "rm A B" draus?
Müsste man m.E. mal testen.

Edit: Grad mal getestet, scheint nicht zu klappen
Code:
root@DS1522:~# touch "A B"
root@DS1522:~# echo "A B" | xargs rm
rm: cannot remove 'A': No such file or directory
rm: cannot remove 'B': No such file or directory

Edit2: Mit
Code:
echo "'A B'" | xargs rm
klappt es. Vielleicht müsste man nur statt {print $3} ein {print '$3'} einbauen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peterhoffmann
Edit: Grad mal getestet, scheint nicht zu klappen

Vielleicht müsste man nur statt {print $3} ein {print '$3'} einbauen.
Maskiere ich die Variable im awk Befehl (…{print "$3"}…), wird sie nicht expandiert und liefert nur $3 für jede Zeile.

Aber so klappt es hier bei mir jetzt auch mit Leerzeichen im Dateinamen:
Bash:
find /volume1/dein/Pfad  -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "20:00" || $2 <= "06:00" {print $3}' | xargs -I{} rm "{}"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: tAntChen und Benares
@peterhoffmann
Damit dein erstes Beispiel in #26 funktioniert (&&-Verknüpfung) muss die erste Zeit kleiner als die zweite Zeit sein (oder es müssen die Vergleichsoperatoren geändert werden). Und die Beschriftung über/ohne Mitternacht ist irgendwie auch unlogisch.
 
die erste Zeit kleiner als die zweite Zeit sein
Stimmt. Ärgerlich, dass die Bearbeitungszeit für eigene Postings nur so kurz ist. Statt ein paar Minuten würde ich mir da ein paar Stunden wünschen.

Daher hier noch mal, mit den Änderungen von Geimist.
Ich hoffe, dass das nun die Endlösung ist und wir hier nicht am Ende 10 Endlösungen haben. *lach*

mit Tageswechsel von 20 bis 6 Uhr morgens:
Bash:
find /volume1/dein/Pfad  -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "20:00" || $2 <= "06:00" {print $3}' | xargs -I{} rm "{}"

ohne Tageswechsel z.B. von 16 bis 18 Uhr:
Bash:
find /volume1/dein/Pfad  -type f -printf "%TY-%Tm-%Td~%TH:%TM~%p\n" | awk -F~ '$2 >= "16:00" && $2 <= "18:00" {print $3}' | xargs -I{} rm "{}"
 

Additional post fields

 

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