Знайдіть файли новіші, ніж на 15 секунд, але старші за 2 секунди


17

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

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

Будь-яка допомога дуже вдячна


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'

Крім того, саме ви (та інші читачі) знаєте, що "новіші" означають модифіковані останнім часом, а не створені останнім часом.


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

"новіший" означає "останнім часом". Це "m", що означає "модифікований".
OrangeDog

4

Ви не згадали про свою ОС ....

Це чудово працює із сучасною реалізацією пошуку, на зразок тієї від FreeBSD або з sfind.

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind є частиною інструментів Schily: http://sourceforge.net/projects/schilytools/files/

Попередження: Я щойно виявив проблему в sfind. Якщо -mtimeаргументи менше 60-х, він не працюватиме правильно, оскільки час файлу в даний час порівнюється з позначкою часу 60 секунд у майбутньому, який спочатку обчислювався для перемикання року -ls.

BTW: -notне належить find, це непереносний GNUism.


1
Є bashтег… Отже, середовищем можуть бути Cygwin, Debian GNU / Hurd, які bashпрацюють на FreeBSD або Solaris,… ;-)
phk

Для GNU findздається, що десятичники, хоча і божевільні, можуть використовуватися як спосіб вирішення.
Arthur2e5

Знайти POSIX має !для -not як! expression . Тож, нічого страшного.

@phk Ось чому я згадав метод , який працює з розширеним стандартом primaryвід findінформувати людей , що немає необхідності постійно додавати нові , primariesщоб знайти , щоб мати можливість для розширення функціональних можливостей . BTW: Виправлений libfindфайл був опублікований у schily tools.
schily

@BinaryZebra проблема в тому, що він gfindвзагалі додав -notпсевдонім. Він ніколи не був потрібний, і його присутність може розглядатися як блокування постачальника в стратегії.
schily
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.