Finden Sie alle Dateien, die älter als eine Minute sind

8

Wie kann ich findDateien auswählen, die in letzter Minute geschrieben und nicht geändert wurden?

Ich weiß, dass ich es umgekehrt machen kann, Dateien finden, die in den letzten 60 Sekunden geändert wurden -mtime -60s, aber ich möchte diejenigen, die in den letzten 60 Sekunden nicht geändert wurden.

Ich benutze Linux und erhalte diesen Fehler, wenn ich Sekunden benutze:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
quelle

Antworten:

13

Verwenden find /path -type f -mtime +60s

Das -kurz vor den Ziffern ist kein regulärer "Argumentstrich", sondern bedeutet "kleiner als". +dann ist "mehr als".

Von man find:

Bei allen Primärfarben, die ein numerisches Argument verwenden, kann der Zahl ein Pluszeichen ("+") oder ein Minuszeichen ("-") vorangestellt werden. Ein vorangestelltes Pluszeichen bedeutet "mehr als n", ein vorangestelltes Minuszeichen bedeutet "weniger als n" und keines bedeutet "genau n".

Es ist zu beachten, dass für genau n die Zeit gerundet ist. So 1(1 Tag) bedeutet nicht , 86.400 Sekunden.

Daniel Beck
quelle
2
Genau genommen +60ist es nicht das Gegenteil von -60, aus dem gleichen Grund weniger als nicht das Gegenteil von größer als : Beide schließen den genauen Wert aus, mit dem sie vergleichen. Ihre Frage gibt jedoch nicht genau an, welches Verhalten Sie möchten.
Daniel Beck
Dies ist in der Tat nicht genau das gleiche, da! Setzt die ursprüngliche "Abfrage" zurück. Aber einverstanden, das OP gibt nicht an, was er will.
Karolos
Am Tag danach gab das OP an, dass es unter Linux und nicht unter Mac OS X läuft. Wenn dies die Antwort geändert hätte, können Sie es aktualisieren?
Peter Mortensen
1
Ja, das funktioniert unter Linux nicht. Mindestens RHEL 5.6. Die unten stehende Antwort von SiegeX funktioniert jedoch.
MattPark
2
Dies funktioniert unter CentOS nicht. Wie angenommen funktioniert es in Mac OS X
Trante
14
find . -type f -mmin +1

Beispiel

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
quelle
Es ist nicht mehr mit markiert osx.
Peter Mortensen
4

Das zweite -in -mtime -60sist kein Optionsbegrenzer.

-mtimeist eine Option, gefolgt von einem Optionsargument . Das Optionsargument ist -60sund das -darin enthaltene Teil des Optionsarguments selbst kein Optionsbegrenzer. Es bedeutet "weniger als 60 Sekunden". Optionsargumente 60sund +60sbedeuten "gleich 60 Sekunden" bzw. "größer als 60 Sekunden".

Das Apple MacOS-Handbuch und das FreeBSD-Handbuch erwähnen die Präfixe +und -an genau einer Stelle und vergessen, irgendwo zu erklären, was sie sind. Das sind sie.

( findInteressanterweise enthält das GNU-Info-Handbuch für GNU dieselbe Auslassung. Die findSyntax von GNU unterscheidet sich jedoch zeitweise etwas von der BSD- und MacOS- findSyntax.)

Weiterführende Literatur

  • Apple aufgenommen (2008-02-24). findMacOS 10 Handbuchseite . MacOS 10-Entwicklerbibliothek.
  • find(1) . 2010-03-17. FreeBSD General Commands Manual. FreeBSD-Projekt.
JdeBP
quelle
1
Es ist noch schlimmer, als es nur an genau einer Stelle zu erklären : Alle anderen Optionen beziehen sich auf atimedas Zeitformat, aber das erklärt auch nicht die Präfixe . Es ist ein separater Abschnitt, auf den nicht verwiesen wird.
Daniel Beck
Tatsächlich; und du wirst feststellen, dass ich das geschrieben habe. Ich schrieb "Erwähnung" und "Vergiss irgendwo zu erklären". ☺
JdeBP
Ich wollte Ihnen nicht widersprechen, wollte nur darauf hinweisen, dass genau der eine Ort auch der schlechteste Ort aus einem POV "Lasst uns einfach die Manpage überfliegen" ist.
Daniel Beck
Aber es wird nicht genau an einer Stelle erklärt. Es wird an keiner Stelle erklärt. Für eine Reihe von Handbuchseiten, die im Allgemeinen ziemlich gut geschrieben und bearbeitet sind, ist dies meiner Erfahrung nach eine überraschende Auslassung.
JdeBP
1
Heh! Das liegt daran, dass Sie die Antwort auf magische Weise bereits kennen und beim Lesen des Dokuments die beiden verbinden können, indem Sie das ausfüllen, was nicht wirklich geschrieben ist. Die Leute, die unser Vorwissen nicht haben und das Handbuch lesen, um herauszufinden, müssen sich fragen, warum es keine Erklärung dafür gibt, was ein "Modifikator" irgendwo ist. ☺
JdeBP
3

Sie sollten in der Lage sein zu verwenden

find . ! -mtime -60s
Karolos
quelle
1
Benötigt Klammern für mich:find . !( -mtime -60s )
Der Hochstapler
@OliverSalzburg: Auf meinem Mac funktioniert es ohne Klammern (Darwin Kernel Version 11.2.0).
Karolos
1

In Unix-Systemen folgte auf -mtime ein +/-, gefolgt von einer Zahl gefolgt von Zeiteinheiten. [+ -] nn [dms]

Linux verwendet mtime für Tage, mmin für Minuten, aber es scheint keine Sekundenoption zu geben und es wird kein Zeiteinheitenbezeichner verwendet. Das + oder - bezieht sich immer noch auf mehr als oder weniger als die Zeit und nicht auf ein Optionsargument, wie oben erwähnt.

Sie könnten -mmin 1 verwenden, aber /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds erläutert, wie Sekunden im Allgemeinen behandelt werden .

Nick Greenwood
quelle