Как можно использовать find
для выбора файлов, которые были записаны и не изменены за последнюю минуту?
Я знаю, что можно сделать наоборот, найти файлы, измененные за последние 60 секунд, с помощью -mtime -60s
, но мне нужны те, которые не были изменены за последние 60 секунд.
Я использую Linux и получаю эту ошибку, если использую секунды:
find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
решение1
Использоватьfind /path -type f -mtime +60s
Знак -
перед цифрами не является обычным «аргументным тире», а означает «меньше чем». +
Затем следует «больше чем».
От man find
:
Все основные элементы, принимающие числовой аргумент, допускают наличие перед числом знака плюс (``+'') или знака минус (``-''). Предшествующий знак плюс означает «больше, чем n», предшествующий знак минус означает «меньше, чем n», и ни один из них не означает «ровно n».
Следует отметить, что дляровно н, время округляется. Так что 1
(1 день) не означает 86400 секунд.
решение2
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
решение3
Второе -
- -mtime -60s
этонетразделитель вариантов.
-mtime
является опцией, и за ней следуетаргумент вариантаАргументом опции является -60s
, а -
в нем — часть самого аргумента опции,нетразделитель опций. Означает «менее 60 секунд». Аргументы опций 60s
и +60s
означают «равно 60 секундам» и «больше 60 секунд» соответственно.
В руководстве Apple MacOS и руководстве FreeBSD префиксы +
и упоминаются -
только в одном месте, и нигде не упоминается, что они означают. Вот что они означают.
find
( Довольно интересно, что в руководстве GNU Info для GNU есть такое же упущение. Однако find
синтаксис GNU для времени несколько отличается от find
синтаксиса BSD и MacOS.)
дальнейшее чтение
- Apple зарегистрирована (24.02.2008).
find
Страница руководства MacOS 10. Библиотека разработчика MacOS 10. find
(1). 2010-03-17. Руководство по основным командам FreeBSD. Проект FreeBSD.
решение4
В системах Unix за -mtime следовал знак +/-, за которым следовало число и единицы времени. [+-]nn[dms]
Linux использует mtime для дней, mmin для минут, но, похоже, нет опции секунд и не используется спецификатор единиц времени. + или - по-прежнему относится к большему или меньшему времени, а не к аргументу опции, как упоминалось выше.
Вы можете использовать -mmin 1, ноhttps://unix.stackexchange.com/questions/238738/find-files-newer-than-15-seconds-but-older-than-2-secondsобсуждается, как обращаться со секундами в целом.