Ницца. Обратите внимание, что -not -newermt '-2 seconds'также будет соответствовать файлам ровно 2 секунды. Используйте, -not -newermt '3 seconds'чтобы исключить их.
Тердон
1
Да, крайние случаи всегда весело. Я на самом деле не уверен, какое разрешение он использует для этих сравнений. Я предполагаю, что все, что было изменено ~ 2.000000001 секунд назад, является совпадением, но это также зависит от вашей файловой системы и операционной системы.
Микель
Хороший вопрос, я понятия не имею, что это за резолюция. Я только что проверил touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'и получил file.
Тердон
@terdon Ну, это зависит от того, имеют ли метки времени более точное разрешение, чем одна секунда; это будет зависеть от системы, файловой системы и даже может отличаться в разных файлах одной и той же файловой системы, если она используется несколькими разными машинами.
Blacklight Shining
«новее» означает «совсем недавно». Это «м», что означает «модифицированный».
OrangeDog
4
Вы не упомянули свою ОС ....
Это прекрасно работает с современной реализацией find, такой как FreeBSD или с sfind.
ВНИМАНИЕ: Я только что обнаружил проблему в sfind. Если -mtimeаргументы меньше 60 с, он не будет работать правильно, так как время файла в настоящее время сравнивается с отметкой времени 60 секунд в будущем, которая изначально была рассчитана для переключателя года -ls.
Кстати -not, не принадлежит find, это непереносимый GNUism.
@phk Вот почему я упомянул метод , который работает с расширенным стандартом primaryот findинформировать людей , что нет необходимости постоянно добавлять новые , primariesчтобы найти , чтобы иметь возможность для расширения функциональных возможностей . Кстати, исправление libfindбыло опубликовано в schily tools.
Щили
@BinaryZebra проблема в том, что gfindдобавили -notпсевдоним вообще. Это никогда не было необходимо, и его присутствие можно рассматривать как блокировку в стратегии.
find
реализациях.Ответы:
Вы можете объединять несколько предикатов, связывая их.
Там нет
-oldermt
, но вы можете написать это как-not -newermt
.Ты хочешь:
-newermt '-15 seconds'
сказать, что файл менее 15 секунд, и-not -newermt '-2 seconds'
сказать, что файл более 2 секундПытаться:
Или, чтобы быть POSIX-совместимым:
Кроме того, чтобы вы (и другие читатели) знали, что «новее» означает, что он был изменен совсем недавно, а не создан недавно.
источник
-not -newermt '-2 seconds'
также будет соответствовать файлам ровно 2 секунды. Используйте,-not -newermt '3 seconds'
чтобы исключить их.touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'
и получилfile
.Вы не упомянули свою ОС ....
Это прекрасно работает с современной реализацией find, такой как FreeBSD или с
sfind
.find /my/directory -name '*.jpg' -mtime -15s -mtime +2s
Sfind является частью инструментов Schily: http://sourceforge.net/projects/schilytools/files/
ВНИМАНИЕ: Я только что обнаружил проблему в
sfind
. Если-mtime
аргументы меньше 60 с, он не будет работать правильно, так как время файла в настоящее время сравнивается с отметкой времени 60 секунд в будущем, которая изначально была рассчитана для переключателя года-ls
.Кстати
-not
, не принадлежитfind
, это непереносимый GNUism.источник
bash
тег… Таким образом, среда может быть Cygwin, Debian GNU / Hurd,bash
работающей на FreeBSD или Solaris,… ;-)find
кажется, что десятичные дроби, хотя и сумасшедшие, могут быть использованы в качестве обходного пути.!
для -не как! expression
. Так что, ничего страшного.primary
отfind
информировать людей , что нет необходимости постоянно добавлять новые ,primaries
чтобы найти , чтобы иметь возможность для расширения функциональных возможностей . Кстати, исправлениеlibfind
было опубликовано вschily tools
.gfind
добавили-not
псевдоним вообще. Это никогда не было необходимо, и его присутствие можно рассматривать как блокировку в стратегии.