Найти файлы старше 15 секунд, но старше 2 секунд

17

Я хочу найти файлы новее 15 секунд, но старше 2 секунд. Вот скрипт, который я сейчас использую, который захватывает файлы новее 15 секунд:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

Любая помощь с благодарностью

Yllier123
источник
2
Какую операционную систему ты используешь? Есть различия в findреализациях.
Тердон
Должен ли файл, измененный ровно 2 секунды назад, совпадать? Как насчет файла, модифицированного ровно 15 секунд назад?
Микель
Не более 2 секунд в момент запуска сценария или в момент его окончания?
Стефан Шазелас
@Mikel, это, вероятно, не имеет значения, так как часы имеют наносекундное разрешение в наше время.
Стефан Шазелас
1
Хорошо ... так как никто не спрашивает ... @ Yllier123, зачем вам искать файлы, созданные за 2 <x <15 сек? Мне просто интересно.
C Bauer

Ответы:

17

Вы можете объединять несколько предикатов, связывая их.

Там нет -oldermt, но вы можете написать это как -not -newermt.

Ты хочешь:

  • -newermt '-15 seconds' сказать, что файл менее 15 секунд, и
  • -not -newermt '-2 seconds' сказать, что файл более 2 секунд

Пытаться:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

Или, чтобы быть POSIX-совместимым:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

Кроме того, чтобы вы (и другие читатели) знали, что «новее» означает, что он был изменен совсем недавно, а не создан недавно.

Mikel
источник
3
Ницца. Обратите внимание, что -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.

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.

Шили
источник
1
Есть bashтег… Таким образом, среда может быть Cygwin, Debian GNU / Hurd, bashработающей на FreeBSD или Solaris,… ;-)
phk
Для GNU findкажется, что десятичные дроби, хотя и сумасшедшие, могут быть использованы в качестве обходного пути.
Arthur2e5
POSIX найти имеет !для -не как! expression . Так что, ничего страшного.
@phk Вот почему я упомянул метод , который работает с расширенным стандартом primaryот findинформировать людей , что нет необходимости постоянно добавлять новые , primariesчтобы найти , чтобы иметь возможность для расширения функциональных возможностей . Кстати, исправление libfindбыло опубликовано в schily tools.
Щили
@BinaryZebra проблема в том, что gfindдобавили -notпсевдоним вообще. Это никогда не было необходимо, и его присутствие можно рассматривать как блокировку в стратегии.
Щили