So finden Sie die Dateien, die in der letzten Stunde unter Unix erstellt wurden


134

So finden Sie die Dateien, die in der letzten Stunde unter Unix erstellt wurden

Antworten:


212

Wenn das zu suchende Verzeichnis srch_dirdann ist

$ find srch_dir -cmin -60 # change time

oder

$ find srch_dir -mmin -60 # modification time

oder

$ find srch_dir -amin -60 # access time

Zeigt Dateien an, die in der letzten Stunde erstellt, geändert oder aufgerufen wurden.

Korrektur: ctime ist für die Änderung der Knotenzeit (unsicher, bitte korrigieren Sie mich)


2
Das ist großartig und alles, aber diese Flags existieren unter Solaris find, die ich verwende, nicht. OP sagte Unix und ich denke, das sind nur Linux.
Jiggy

11
Der Trick besteht darin, negative Zeitwerte zu verwenden! Es ist nicht so offensichtlich in der Manpage.
Sphakka

@jiggy Ayushs Antwort gibt einen Hack (basierend auf -newer), der unter Solaris funktionieren sollte.
David Moles

3
-cmin ist NICHT Erstellungszeit, sondern Änderungszeit! Ich habe gerade mein .config-Verzeichnis gelöscht, weil es während des Testlaufs in den letzten X Minuten nicht geändert wurde, und als ich es tat, war es ... also vielleicht bearbeiten ...!
Badmaster

Ich denke immer noch, dass der erste Beispielkommentar überarbeitet werden muss. "Änderungszeit" ist der Dateistatus, nicht die Dateidaten
KC Baltz

24

UNIX-Dateisysteme speichern (im Allgemeinen) keine Erstellungszeiten. Stattdessen gibt es nur Zugriffszeit, (Daten-) Änderungszeit und (Inode-) Änderungszeit.

Davon abgesehen findhat -atime -mtime -ctimePrädikate:

$ man 1 find
...
-ctime   n
        Der Primärwert wird als wahr bewertet, wenn der Zeitpunkt der letzten Änderung von
        Dateistatusinformationen von der Initialisierungszeit abgezogen,
        geteilt durch 86400 (wobei der Rest verworfen wird), ist n.
...

So wird vor find -ctime 0weniger als einer Stunde alles gefunden, für das sich der Inode geändert hat (z. B. die Dateierstellung, aber auch die Anzahl der Links und Berechtigungen sowie die Änderung der Dateigröße).


86400 Sekunden sind ein Tag , keine Stunde. Daher ist das Argument für -ctimeetc eher in Einheiten von Tagen als in Stunden.
Gaylon

12

Schauen Sie sich diesen Link an und helfen Sie sich selbst.

Der Grundcode ist

#create a temp. file
echo "hi " >  t.tmp
# set the file time to 2 hours ago
touch -t 200405121120  t.tmp 
# then check for files
find /admin//dump -type f  -newer t.tmp -print -exec ls -lt {} \; | pg

Danke, dies wird jedoch nur nach t.tmp suchen. Was ist, wenn ich alle in der letzten Stunde erstellten Dateien finden möchte?
Ankur

2
Ankur: Es wird eine temporäre Datei t.tmp erstellt und die Erstellungszeit auf 2 Stunden festgelegt. Danach werden im aktuellen Verzeichnis alle Dateien durchsucht, die nach t.tmp erstellt wurden, dh in den letzten 2 Stunden.
ayush

4
cool!! Der erste Befehl ist jedoch nicht erforderlich. touchErstellt die Datei, falls sie noch nicht vorhanden ist.
Amir Uval


3
sudo find / -Bmin 60

Von der manSeite:

-Bmin n

Richtig, wenn der Unterschied zwischen dem Zeitpunkt der Inode-Erstellung einer Datei und dem Startzeitpunkt find, aufgerundet auf die nächste volle Minute, n Minuten beträgt.

Natürlich möchten Sie vielleicht etwas anders einrichten, aber diese primäre Lösung scheint die beste Lösung für die Suche nach Dateien zu sein, die in den letzten N Minuten erstellt wurden.


find (GNU findutils) 4.6.0hat kein -BPrädikat
Blockloop

0

Schauen Sie sich diesen Link für weitere Details an.

Um Dateien zu finden, die in der letzten Stunde im aktuellen Verzeichnis erstellt wurden, können Sie -amin verwenden

finden . -amin -60 -typ f

Dadurch werden Dateien gefunden, mit denen in der letzten 1 Stunde erstellt wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.