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'

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.


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

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


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

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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.