GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie lösche ich Dateien, die zwischen zwei Mal erstellt wurden?

Einfach genug, da Sie Linux markiert haben, haben Sie den stat Befehl verfügbar, der die Änderungszeit einer Datei extrahiert, und der GNU date Befehl, der die Stunde aus einer bestimmten Zeit extrahiert:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
  sh {} \; -ls

Wenn die Ergebnisse korrekt aussehen, dann:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
  sh {} \; -delete

Hier ist ein Testlauf mit dem -ls Version:

$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./11am
1705097    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./12pm

Dank an Kusalananda für das Schreiben der ausgezeichneten Antwort, der ich gefolgt bin, unter:Understanding the -exec option of `find`

Beachten Sie, dass wir dies nicht tun wollen die {} + Version von find hier, wie wir den -exec wollen Ergebnisse pro Datei, sodass wir nur Dateien löschen, die dem Zeitbereich entsprechen.

Das eingebettete Shell-Skript besteht aus zwei Hauptteilen:Ermitteln Sie den Zeitstempel „Stunde“ der Datei und geben Sie dann basierend auf dem Bereich Erfolg oder Fehler zurück. Der erste Teil ist selbst in zwei Stücken ausgeführt. Der Variablen wird das Ergebnis der Befehlsersetzung zugewiesen; der Befehl sollte von innen nach außen gelesen werden:

  1. $(stat -c %Y "$1") -- diese (zweite) Befehlsersetzung ruft stat auf auf der $1 Parameter des eingebetteten Shell-Skripts; $1 wurde von find zugewiesen als einer der gefundenen Pfadnamen. Die Option %Y für stat Der Befehl gibt die Änderungszeit in Sekunden seit der Epoche zurück.
  2. date -d @ ... +%-H -- dies nimmt die Sekunden-seit-der-Epoche aus der obigen Befehlsersetzung und fragt date um uns den Stundenanteil dieser Zeit zu geben; die @ Syntax sagt date dass wir Sekunden seit der Epoche als Eingabeformat angeben. Mit dem - Option im Datumsausgabeformat teilen wir GNU date nicht mit Füllen Sie den Wert mit führenden Nullen auf. Dies verhindert spätere oktale Fehlinterpretationen.

Sobald wir den $h haben Stundenvariable zugewiesen, verwenden wir den Bedingungsoperator [[ von bash um zu fragen, ob dieser Wert größer oder gleich 11 und auch streng kleiner als 15 ist.


Linux
  1. So übertragen Sie Dateien zwischen zwei Computern mit den Befehlen nc und pv

  2. Wie bekomme ich nur Dateien, die nach einem Date mit Ls erstellt wurden?

  3. Wie erhalte ich die Differenz zwischen zwei Daten unter bash

  4. Wie löschen Sie Dateien, die älter als ein bestimmtes Datum in Linux sind?

  5. Wie verbinde ich zwei CSV-Dateien?

So zeigen Sie zwei Dateien nebeneinander in Linux an

So vergleichen Sie zwei Dateien im Linux-Terminal

So synchronisieren Sie Dateien automatisch zwischen zwei Linux-Servern

So löschen Sie Dateien, die in einer anderen Datei unter Linux aufgeführt sind

So entfernen/löschen Sie Dateien in Linux mit dem Befehl rm

Wie lösche ich .fuse_hidden*-Dateien?