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

8

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

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

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

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
источник

Ответы:

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
SiegeX
источник
Это больше не помечено как 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 .)

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

JdeBP
источник
1
Это даже хуже, чем просто объяснить это в одном месте : все остальные параметры относятся к atimeформату времени, но это также не объясняет префиксы . Это отдельный раздел, на который нет ссылок.
Даниэль Бек
Верно; и вы обнаружите, что я написал это. Я написал «упоминание» и «забыть объяснить где угодно». ☺
JdeBP
Я не хотел вам противоречить, просто хотел указать, что именно одно место - это наихудшее место из POV «давай просто просмотрим страницу руководства».
Даниэль Бек
Но это не объясняется точно в одном месте. Это вообще нигде не объясняется. Для набора страниц справочника, который в целом написан и отредактирован довольно хорошо, по моему опыту, это удивительное упущение.
JdeBP
1
Хех! Это потому, что вы волшебным образом уже знаете ответ и можете связать двойку при чтении документа, заполняя то, что на самом деле не написано. Люди, которые не имеют (у) нашего предвидения и читают руководство, чтобы узнать, должны задаться вопросом, почему нет объяснения, что такое «модификатор» где-либо. ☺
JdeBP
3

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

find . ! -mtime -60s
Karolos
источник
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 обсуждает, как обрабатывать секунды в целом ,

Ник Гринвуд
источник