Es scheint, als wären Bash-Scripting-Fragen erlaubt.
Alan
@ MichaelScheper: Ich weiß nicht einmal, wo ich mit diesem Kommentar anfangen soll.
Leichtigkeitsrennen im Orbit
1
@Notinlist: Hier ist die Antwort: meta.stackexchange.com/questions/10249/… Leider hat sich herausgestellt, dass ein Zeitlimit abgelaufen ist. Schade, da hier immer noch Websuchen landen und die akzeptierte Antwort für viele Menschen hilfreich war.
Michael Scheper
@MichaelScheper: Wenn Sie eine Option zum Abstimmen für die Migration zu unix.stackexchange.com finden, weisen Sie mich auf jeden Fall darauf hin. Da Sie nicht den Repräsentanten haben, um den geschlossenen Dialog zu sehen, gebe ich Ihnen einen Hinweis: Es gibt keinen. Seien Sie weniger kämpferisch, wenn Sie keine Ahnung haben, wovon Sie sprechen. Danke für Ihre Aufmerksamkeit.
Leichtigkeitsrennen im Orbit
5
@LightnessRacesinOrbit: Ich entschuldige mich dafür, dass ich als "kämpferisch" rübergekommen bin. Ich darf meine Kommentare nicht bearbeiten, aber war es mein Kommentar, der die Frage lobte, die Sie beleidigt hat? Ich muss sagen, ich fühle mich ein bisschen blind, auch nachdem ich Ihrem vorherigen Kommentar den Vorteil des Zweifels gegeben habe. Ich habe tatsächlich versucht, konstruktiver zu sein, als ein weiteres "Ich auch" hinzuzufügen, indem ich nachgeschlagen habe , wie die Migration funktioniert: meta.stackexchange.com/a/10250/249555 Das 60-Tage-Zeitlimit verbirgt diese Option vielleicht? Entschuldigung für die Pennersteuerung. Nochmals vielen Dank - aufrichtig - für Ihre Zeit und Aufmerksamkeit.
Michael Scheper
Antworten:
323
Wie Max betont hat, ist dies nicht möglich, aber das Überprüfen von Dateien, auf die geändert wurde oder auf die zugegriffen wird, ist nicht allzu schwierig. Ich habe noch heute ein Tutorial darüber geschrieben. Das Wesentliche davon ist zu verwenden -newerXYund ! -newerXY:
Beispiel: So finden Sie alle Dateien, die am 7. Juni 2007 geändert wurden:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
So finden Sie alle Dateien, auf die am 29. September 2008 zugegriffen wurde:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
Oder Dateien, deren Berechtigung am selben Tag geändert wurde:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Wenn Sie die Berechtigungen für die Datei nicht ändern, entspricht 'c' normalerweise dem Erstellungsdatum.
Meine Version von find (GNU 4.2.32) scheint die Prädikate -newerXY nicht zu unterstützen. Gibt es eine bestimmte Mindestversion? Oder handelt es sich um das Kompilieren von find mit einem speziellen Konfigurationsschalter?
Yukondude
1
@yukondude: Du hast recht. Die Version von find, die ich lokal habe - GNU 4.4.0 - hat sie, während 4.1.20, die ich auf Dreamhost habe, dies nicht tut. Der Kludge beim Erstellen von zwei Dateien sollte jedoch in beiden funktionieren.
Arve
1
Auf einigen Systemen (FreeBSD, OS / X ...) -newerBtstimmt die Geburtszeit (Erstellungszeit) der Datei überein .
Stephane Chazelas
3
Beachten Sie, dass das -newerxtauf FreeBSD seit 2001 verfügbar ist (wo es erstmals 1998 als Patch bereitgestellt wurde ), einige andere BSDs und GNU-Fundstücke (seit 4.3.3 im Jahr 2007), basierend auf dem HP / UX-Fund, das eingeführt wurde -newerXY(aber wo) Y == t wird nicht unterstützt).
Stephane Chazelas
Mit: find (GNU findutils) 4.4.0 funktioniert diese Syntax unter SUSE ext3 nicht. Wenn an diesem Datum Dateien / w mtime
Das Problem ist, dass ich für ein bestimmtes Datum testen möchte, nicht innerhalb eines bestimmten Zeitraums.
Sverrejoh
1
Finden Sie heraus, wie viele Tage das her ist, und verwenden Sie diese Nummer.
jmanning2k
15
ctimehat nichts mit der Erstellungszeit zu tun , es ist die Inode-Änderungszeit.
Stephane Chazelas
47
Es sind zwei Schritte, aber ich mache es gerne so:
Erstellen Sie zuerst eine Datei mit einem bestimmten Datum / einer bestimmten Uhrzeit. In diesem Fall ist die Datei 2008-10-01 um Mitternacht
touch -t 0810010000/tmp/t
Jetzt können wir alle Dateien finden, die neuer oder älter als die obige Datei sind (nach Änderungsdatum der Datei. Sie können auch -anewer für den Zugriff verwenden und -cnewer den Dateistatus ändern).
find /-newer /tmp/t
find /-not -newer /tmp/t
Sie können Dateien auch zwischen bestimmten Daten anzeigen, indem Sie zwei Dateien mit Berührung erstellen
+1 für die Lösung eines älteren, finddem es fehlt-newerXY
Felipe Alvarez
1
IMO, im Moment sollte dies die akzeptierte Lösung sein. Ich konnte -newermt nicht auf dem Kernel 2.6.18-348.18.1.el5 ausführen, geschweige denn auf neueren Kerneln.
DarkForce
Gleich hier, DarkForce, scheint die Newermt-Funktionalität sehr, sehr wackelig zu sein
Dies ist, was die meisten Leute wollen, aber es hat nicht genug Upvotes erhalten !!!
Sjas
2
Dies funktioniert möglicherweise nicht, wenn sich einige Millionen Dateien in einem Verzeichnis befinden.
Dennis Nolte
3
Es gibt Nebenwirkungen, wenn der Grep-Suchbegriff im Dateinamen enthalten ist.
Snorex
mywiki.wooledge.org/ParsingLs - Ein besserer Ansatz besteht wahrscheinlich darin, das Erstellungsdatum in maschinenlesbarer Form zu drucken, möglicherweise mit, statwenn Sie dies nicht haben find -printf.
Tripleee
12
Das kannst du nicht. Der Schalter -c zeigt an, wann die Berechtigungen zuletzt geändert wurden, -a testet die letzte Zugriffszeit und -m testet die Änderungszeit. Das von den meisten Linux-Versionen (ext3) verwendete Dateisystem unterstützt keinen Datensatz "Erstellungszeit". Es tut uns leid!
Tatsächlich ist es nicht nur der Dateisystemtyp - es gibt keine Systemschnittstelle zum Abrufen solcher Informationen, selbst wenn das Dateisystem sie enthält. Einer der Mängel von Unix reicht bis in die frühesten Tage zurück, weshalb Unix niemals abheben wird.
Chrisdowney
1
Unix wird nie abheben?
lucid_dreamer
8
@Max: stimmt mit der Erstellungszeit überein.
Wenn Sie jedoch die verstrichene Tage Argument für eine der berechnet werden soll -atime, -ctime, -mtimeParameter, können Sie den folgenden Ausdruck verwenden
Ersetzen Sie "2008-09-24" durch ein beliebiges Datum und ELAPSED_DAYS wird auf die Anzahl der Tage zwischen damals und heute eingestellt. (Update: Subtrahieren Sie eins vom Ergebnis, um es an der Datumsrundung auszurichten find.)
Um eine am 24. September 2008 geänderte Datei zu finden, lautet der Befehl:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Dies funktioniert, wenn Ihre Version von finddie -newerXYin der Antwort von @Arve: genannten Prädikate nicht unterstützt .
Antworten:
Wie Max betont hat, ist dies nicht möglich, aber das Überprüfen von Dateien, auf die geändert wurde oder auf die zugegriffen wird, ist nicht allzu schwierig. Ich habe noch heute ein Tutorial darüber geschrieben. Das Wesentliche davon ist zu verwenden
-newerXY
und! -newerXY
:Beispiel: So finden Sie alle Dateien, die am 7. Juni 2007 geändert wurden:
So finden Sie alle Dateien, auf die am 29. September 2008 zugegriffen wurde:
Oder Dateien, deren Berechtigung am selben Tag geändert wurde:
Wenn Sie die Berechtigungen für die Datei nicht ändern, entspricht 'c' normalerweise dem Erstellungsdatum.
quelle
-newerBt
stimmt die Geburtszeit (Erstellungszeit) der Datei überein .-newerxt
auf FreeBSD seit 2001 verfügbar ist (wo es erstmals 1998 als Patch bereitgestellt wurde ), einige andere BSDs und GNU-Fundstücke (seit 4.3.3 im Jahr 2007), basierend auf dem HP / UX-Fund, das eingeführt wurde-newerXY
(aber wo) Y == t wird nicht unterstützt).find location -ctime time_period
Beispiele für time_period:
Vor mehr als 30 Tagen:
-ctime +30
Vor weniger als 30 Tagen:
-ctime -30
Vor genau 30 Tagen:
-ctime 30
quelle
ctime
hat nichts mit der Erstellungszeit zu tun , es ist die Inode-Änderungszeit.Es sind zwei Schritte, aber ich mache es gerne so:
Erstellen Sie zuerst eine Datei mit einem bestimmten Datum / einer bestimmten Uhrzeit. In diesem Fall ist die Datei 2008-10-01 um Mitternacht
Jetzt können wir alle Dateien finden, die neuer oder älter als die obige Datei sind (nach Änderungsdatum der Datei. Sie können auch -anewer für den Zugriff verwenden und -cnewer den Dateistatus ändern).
Sie können Dateien auch zwischen bestimmten Daten anzeigen, indem Sie zwei Dateien mit Berührung erstellen
Dadurch werden Dateien zwischen den beiden Daten und Zeiten gefunden
quelle
find
dem es fehlt-newerXY
Sie könnten dies tun:
Beispiel:
quelle
stat
wenn Sie dies nicht habenfind -printf
.Das kannst du nicht. Der Schalter -c zeigt an, wann die Berechtigungen zuletzt geändert wurden, -a testet die letzte Zugriffszeit und -m testet die Änderungszeit. Das von den meisten Linux-Versionen (ext3) verwendete Dateisystem unterstützt keinen Datensatz "Erstellungszeit". Es tut uns leid!
quelle
@Max: stimmt mit der Erstellungszeit überein.
Wenn Sie jedoch die verstrichene Tage Argument für eine der berechnet werden soll
-atime
,-ctime
,-mtime
Parameter, können Sie den folgenden Ausdruck verwendenErsetzen Sie "2008-09-24" durch ein beliebiges Datum und ELAPSED_DAYS wird auf die Anzahl der Tage zwischen damals und heute eingestellt. (Update: Subtrahieren Sie eins vom Ergebnis, um es an der Datumsrundung auszurichten
find
.)Um eine am 24. September 2008 geänderte Datei zu finden, lautet der Befehl:
Dies funktioniert, wenn Ihre Version von
find
die-newerXY
in der Antwort von @Arve: genannten Prädikate nicht unterstützt .quelle
Mit den Schaltern -atime, -ctime und -mtime können Sie sich dem nähern, was Sie erreichen möchten.
quelle
quelle
`ls ...`
works wird dasfind
Tool nicht verwendet .Ich habe dieses Skript in einem Skript gefunden, das alle Dateien löscht, die älter als 14 Tage sind:
Ich denke, ein wenig zusätzlicher "Mann finden" und das Suchen nach den Parametern -ctime / -atime usw. wird Ihnen hier helfen.
quelle