Найти все файлы старше одной минуты


8

Как я могу использовать findдля выбора файлов, которые были записаны и не были изменены в последнюю минуту?

Я знаю, что могу сделать это наоборот, найти файлы, измененные за последние 60 секунд -mtime -60s, но я хочу те, которые не были изменены за последние 60 секунд.

Я использую Linux и получаю эту ошибку, если я использую секунды:

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

Ответы:


13

использование find /path -type f -mtime +60s

-Только перед цифрами не является обычным «аргументом тир», а значит «меньше». +тогда "больше чем".

От man find:

Все первичные числа, которые принимают числовой аргумент, позволяют номеру предшествовать знаком плюс (`` + '') или знаком минус (`` - ''). Предыдущий знак плюс означает «больше чем n», предыдущий знак минус означает «меньше чем n», и ни один из них не означает «ровно n».

Следует отметить, что для ровно n время округляется. Таким образом, 1(1 день) не означает 86400 секунд.


2
Строго говоря, +60это не противоположность -60, по той же причине меньше, чем не противоположность больше чем : Оба исключают точное значение, с которым они сравниваются. Но ваш вопрос не указывает, какое именно поведение вы хотите.
— Даниэль Бек

Это не совсем то же самое, так как! возвращает исходный «запрос». Но согласился, ОП не указывает, что он хочет.
— Каролос

На следующий день OP заявил, что это на Linux, а не Mac OS X. Если это изменило бы ответ, вы можете его обновить?
— Питер Мортенсен

1
Да, это не работает в Linux. Хотя бы RHEL 5.6. Ответ SiegeX ниже работает, однако.
— MattPark

2
Это не работает на CentOS. Как и предполагалось, он работает в Mac OS X
— Trante

14
find . -type f -mmin +1

пример

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

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt

Это больше не помечено как osx.
— Питер Мортенсен

4

Вторые -в -mtime -60sэто не вариант разделитель.

-mtimeявляется опцией, и за ней следует аргумент опции . Аргумент option имеет значение -60s, а -внутри него является частью самого аргумента option, а не разделителем опции. Это означает «менее 60 секунд». Опция аргументов 60sи +60sозначает «равно 60 секундам» и «больше 60 секунд» соответственно.

Руководство Apple MacOS и руководство Упоминание FreeBSD +и -префиксы точно в одном месте, и забудьте объяснить в любом месте , что они есть. Это то, что они есть.

(Руководство GNU Info для GNU findимеет то же упущение, что довольно интересно. Однако findсинтаксис GNU для времен несколько отличается от findсинтаксиса BSD и MacOS .)

дальнейшее чтение


1
Это даже хуже, чем просто объяснить это в одном месте : все остальные параметры относятся к atimeформату времени, но это также не объясняет префиксы . Это отдельный раздел, на который нет ссылок.
— Даниэль Бек

Верно; и вы обнаружите, что я написал это. Я написал «упоминание» и «забыть объяснить где угодно». ☺
— JdeBP

Я не хотел вам противоречить, просто хотел указать, что именно одно место - это наихудшее место из POV «давай просто просмотрим страницу руководства».
— Даниэль Бек

Но это не объясняется точно в одном месте. Это вообще нигде не объясняется. Для набора страниц справочника, который в целом написан и отредактирован довольно хорошо, по моему опыту, это удивительное упущение.
— JdeBP

1
Хех! Это потому, что вы волшебным образом уже знаете ответ и можете связать двойку при чтении документа, заполняя то, что на самом деле не написано. Люди, которые не имеют (у) нашего предвидения и читают руководство, чтобы узнать, должны задаться вопросом, почему нет объяснения, что такое «модификатор» где-либо. ☺
— JdeBP

3

Вы должны быть в состоянии использовать

find . ! -mtime -60s

1
Требует скобки для меня:find . !( -mtime -60s )
— Der Hochstapler

@OliverSalzburg: На моем Mac все работает нормально без скобок (Darwin Kernel Version 11.2.0).
— Каролос

1

В системах Unix -mtime использовался после +/-, за которым следовало число, за которым следовали единицы времени. [+ -] Н. [д.м.н.]

Linux использует mtime для дней, mmin для минут, но, кажется, нет опции секунд и не использует спецификатор единиц времени. + Или - по-прежнему относится к большему или меньшему времени, чем к аргументу параметра, как упомянуто выше.

Вы можете использовать -mmin 1, но /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds обсуждает, как обрабатывать секунды в целом ,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.