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

Suchen und Löschen von Dateien mit einem bestimmten Datum

Sie können find verwenden . Datum nach Bedarf und Verwendung berechnen,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print

Löschen Sie sie nach der Bestätigung,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete

Für den Anfang finden Sie erstellte Dateien auf eine bestimmte Zeit ist etwas schwierig, da die Erstellungszeit meist nirgendwo gespeichert oder schwer zu bekommen ist. Was Sie haben, ist mtime , oder die letzte Änderungszeit, und ctime Dies ist die "Änderungszeit", die bei Änderungen am Inode aktualisiert wird. Ich nehme an, Sie möchten die Änderungszeit.

Das Auffinden von Dateien, die an einem bestimmten Datum geändert wurden, erwies sich seit find als leicht interessant scheint es ein bisschen schwierig zu machen, es mit Dateien richtig zu machen, die genau um Mitternacht erstellt wurden.

Wenn wir die relative Zeit kennen (d. h. es war gestern), könnten wir find -daystart -mtime 1 verwenden , aber es findet die geänderte Datei zur falschen Mitternacht, Aug 8 00:00 . Dies scheint jedoch zu funktionieren:

find dir/ -daystart -mtime +0 \! -mtime +1 -ls

Wenn Sie die relative Zeit nicht berechnen möchten, und Ihre find hat -newerXY :

find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls

Auch hier werden die Dateien, die genau um Mitternacht erstellt wurden, falsch angezeigt, da der Vergleich "neuer" ist, nicht "neuer oder so alt wie". Wenn Ihr System jedoch eine Genauigkeit von unter einer Sekunde für Zeitstempel hat, kann es schwierig sein, dies zu erreichen, aber es passiert, wenn Sie mit Dateien testen, die von touch erstellt wurden ...

Ein haariger Workaround dafür wäre etwa so:

find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls

Fügen Sie in jedem Fall den erforderlichen -name "DBG_A_sql*" hinzu nur die Dateien mit dem richtigen Namen zu nehmen. Sie können die -ls ersetzen am Ende mit -delete um die Dateien zu löschen, anstatt sie aufzulisten. (-ls , -delete und -newerXY existieren zumindest in GNU find und dem BSD find unter OS X.)

Natürlich könnten Sie die Textdarstellung des Datums tatsächlich parsen, aber ls macht es schwierig, es richtig zu machen, wenn ein Joker Dateien mit nicht druckbaren Zeichen erstellt. Sicher, die Beispieldateien haben keine solchen, aber im Allgemeinen könnte jeder sie erstellen, insbesondere in /tmp .

(Allerdings mit | xargs rm Sie würden diese Dateien einfach übersehen, und da Dateinamen keine Schrägstriche enthalten dürfen, wäre es für jeden schwierig, auf Ihren rm zu zeigen in ein anderes Verzeichnis.)


Bash-Schleife einfach

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done

Linux
  1. Sortieren Sie Dateien in einem bestimmten Ordner mit Ranger?

  2. Ausführbare Dateien mit ls und grep finden

  3. Suchen Sie rekursiv nach Dateien mit einer bestimmten Erweiterung

  4. Entfernen von Dateien mit rm unter Verwendung von find und xargs

  5. Verwendung von find und tar mit Dateien mit Sonderzeichen im Namen

So finden Sie eine bestimmte Zeichenfolge oder ein bestimmtes Wort in Dateien und Verzeichnissen

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

Finden Sie verlorene Dateien mit Scalpel

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Wie finde ich alle Dateien und Verzeichnisse, die von einem bestimmten Benutzer beschreibbar sind?