Dateien nach Uhrzeit löschen

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
Weiteres Problem:
Wenn im Dateinamen ein Leerzeichen ist, wird er durch den Printbefehl ($3) abgeschnitten.
 

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
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

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.379
Punkte
234
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:

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.379
Punkte
234
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

Einie

Benutzer
Mitglied seit
04. Jul 2023
Beiträge
5
Punkte für Reaktionen
0
Punkte
1
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.
 

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
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!)
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.803
Punkte für Reaktionen
3.761
Punkte
468
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

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.379
Punkte
234
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

Hagen2000

Benutzer
Mitglied seit
25. Mai 2016
Beiträge
343
Punkte für Reaktionen
119
Punkte
43
@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.
 

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
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 "{}"
 


 

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