Znajdź wszystkie pliki starsze niż jedna minuta

8

Jak mogę użyć, findaby wybrać pliki, które zostały zapisane i nie zostały zmodyfikowane w ostatniej chwili?

Wiem, że mogę to zrobić na odwrót, znaleźć pliki zmodyfikowane w ciągu ostatnich 60 sekund -mtime -60s, ale chcę te, które nie zostały zmodyfikowane w ciągu ostatnich 60 sekund.

Używam Linuksa i pojawia się ten błąd, jeśli używam sekund:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
źródło

Odpowiedzi:

13

Posługiwać się find /path -type f -mtime +60s

-Tuż przed cyfr nie jest zwykłym „kreska argument”, lecz oznacza „mniej niż”. +wtedy jest „więcej niż”.

Od man find:

Wszystkie liczby podstawowe, które przyjmują argument liczbowy, pozwalają, aby liczba była poprzedzona znakiem plus (`` + '') lub znakiem minus (`` - ''). Poprzedni znak plus oznacza `` więcej niż n '', poprzedzający znak minus oznacza `` mniej niż n '' i żaden nie oznacza `` dokładnie n ''.

Należy zauważyć, że dla dokładnie n czas jest zaokrąglany. Tak więc 1(1 dzień) nie oznacza 86400 sekund.

Daniel Beck
źródło
2
Ściśle mówiąc, +60nie jest przeciwieństwem -60, z tego samego powodu mniejszego niż nie jest przeciwieństwem większego niż : Oba wykluczają dokładną wartość, z którą porównują. Ale twoje pytanie nie wskazuje dokładnie, jakie zachowanie chcesz.
Daniel Beck
To nie jest dokładnie to samo, odkąd! przywraca oryginalne „zapytanie”. Ale zgodził się, OP nie określa, czego chce.
Karolos
Dzień później OP stwierdził, że jest na Linuksie, a nie na Mac OS X. Jeśli to by zmieniło odpowiedź, czy możesz to zaktualizować?
Peter Mortensen
1
Tak, to nie działa w systemie Linux. Co najmniej RHEL 5.6. Poniższa odpowiedź SiegeX działa.
MattPark,
2
To nie działa na CentOS. Jak przypuszczalnie działa w systemie Mac OS X
trante
14
find . -type f -mmin +1

Przykład

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

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
źródło
Nie jest już oznaczony osx.
Peter Mortensen
4

Drugi -w -mtime -60sto nie ogranicznik opcja.

-mtimejest opcją, po której następuje argument opcji . Argumentem opcji jest -60selement, -który jest częścią samego argumentu opcji, a nie ogranicznikiem opcji. Oznacza to „mniej niż 60 sekund”. Argumenty opcji 60si +60soznaczają odpowiednio „równe 60 sekund” i „dłuższe niż 60 sekund”.

Podręcznik Apple MacOS i FreeBSD wspominają +i -prefiksy dokładnie w jednym miejscu i zapominają wyjaśniać gdziekolwiek są. Oto czym oni są.

(Podręcznik GNU Info dla GNU findzawiera to samo pominięcie, co ciekawe. Jednak findskładnia GNU dla czasów różni się nieco od findskładni BSD i MacOS .)

Dalsza lektura

JdeBP
źródło
1
Jest to nawet gorsze niż wyjaśnienie go dokładnie w jednym miejscu : wszystkie inne opcje odnoszą się atimedo formatu czasu, ale to również nie wyjaśnia prefiksów . To osobna sekcja, do której nie ma odniesienia.
Daniel Beck
W rzeczy samej; i przekonasz się, że to napisałem. Napisałem „wspomnieć” i „zapomnieć gdziekolwiek wyjaśnić”. ☺
JdeBP
Nie chciałem ci zaprzeczyć, chciałem tylko zaznaczyć, że dokładnie jedno miejsce jest również najgorszym możliwym miejscem z POV „po prostu przejrzyj stronę podręcznika”.
Daniel Beck
Ale nie wyjaśniono tego dokładnie w jednym miejscu. W żadnym miejscu tego nie wyjaśniono. W przypadku zestawu stron podręcznika, który jest ogólnie napisany i zredagowany dość dobrze, z mojego doświadczenia jest to zaskakujące pominięcie.
JdeBP
1
Heh! To dlatego, że już znasz magiczną odpowiedź i możesz połączyć twarze podczas czytania dokumentu, wypełniając to, co nie jest napisane. Ludzie, którzy nie mają (y) naszej wiedzy wstępnej i czytają instrukcję, aby się dowiedzieć, muszą się zastanawiać, dlaczego nie ma wyjaśnienia, czym jest „modyfikator”. ☺
JdeBP
3

Powinieneś być w stanie używać

find . ! -mtime -60s
Karolos
źródło
1
Wymaga dla mnie nawiasów:find . !( -mtime -60s )
Der Hochstapler
@OliverSalzburg: Na moim komputerze Mac działa poprawnie bez nawiasów (Darwin Kernel wersja 11.2.0).
Karolos
1

W systemach uniksowych -mtime poprzedza +/-, po którym następuje liczba, a następnie jednostki czasu. [+ -] nn [dms]

Linux używa mtime dla dni, mmin dla minut, ale wydaje się, że nie ma opcji sekund i nie używa specyfikatora jednostek czasu. Znak + lub - nadal odnosi się do czasu dłuższego niż lub krótszego niż do argumentu opcji, jak wspomniano powyżej.

Możesz użyć -mmin 1, ale /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds omawia ogólnie sposób obsługi sekund .

Nick Greenwood
źródło