Почему действительно находит-mtime +1 только файлы возврата более старый, чем 2 дня?

/etc/fstab не используется для определения местоположения корневой фс. В меню личинки нажать e отредактировать запись и изменить корень = параметр командной строки ядра для указания на снимок. Это загрузит от снимка только это время.

121
02.05.2015, 23:54
7 ответов

Ну, простой ответ, я предполагаю, что Ваша реализация находки следует стандарту POSIX/SuS, в котором говорится, что это должно вести себя этот путь. Заключение в кавычки из Станд. SUSv4/IEEE 1003.1, 2013 Выпуск, "находит":

- mtime n
     Основное устройство должно оценить как верное, если время изменения файла вычло
     со времени инициализации, разделенного на 86 400 (с любым отброшенным остатком), n.

(В другом месте в том документе это объясняет это n может на самом деле быть +n, и значение этого как "больше, чем").

Относительно того, почему в стандарте говорится, он должен вести себя тот путь — хорошо, я предполагал бы долго в прошлом, программист был ленив или не думал об этом и просто написал код C (current_time - file_time) / 86400. C целочисленная арифметика отбрасывает остаток. Сценарии запустились в зависимости от того поведения, и таким образом оно было стандартизировано.

spec'd поведение также было бы портативным к гипотетической системе, которая только сохранила дату модификации (не время). Я не знаю, существовала ли такая система.

92
27.01.2020, 19:29
  • 1
    была ясно разработана, чтобы делать работы очистки только. –  Kjeld Flarup 19.01.2017, 12:47

Таким образом, если файл составляет 1 день, 23 часа, 59 минут и 59 старых секунд, находят, что-mtime +1 игнорирует все это и просто рассматривает его как, он - 1 день, 0 часов, 0 минут и 0 старых секунд?

Да. Как man find говорит, "любая дробная часть проигнорирована". При делении "1 дня, 23 часов, 59 минут и 59 секунд" в течение "24 часов", можно добраться 1.9999, но.9999 частей затем разделяются, и внезапно файл составляет только 1 старый день.

19
27.01.2020, 19:29

Используйте-mmin, - амин, и т.д. для получения точных результатов

4
27.01.2020, 19:29
  • 1
    -?min аргументы работают точно как -?time аргументы кроме с минутами вместо дней. Они не “точны” также. Примечание –  Gilles 'SO- stop being evil' 02.05.2015, 23:53

Аргумент -mtime интерпретируется как количество целых дней в возрасте файла. -mtime +n средства, строго больше, чем, -mtime -n средства строго меньше, чем.

Обратите внимание, что с Bash, можно сделать более интуитивное:

$ find . -mmin +$((60*24))
$ find . -mmin -$((60*24))

найти файлы более старыми и более новыми, чем 24 часа, соответственно.

(Это также легче, чем ввод в дробном аргументе -mtime поскольку, когда Вы хотите разрешение в течение многих часов или минут.)

90
27.01.2020, 19:29
  • 1
    Для списка тех файлов (регулярный только) с человекочитаемыми размерами и в хронологическом порядке сделать $ find . -type f -mmin -$((60*24)) -exec ls -halt {} + –  Evgeni Sergeev 04.02.2014, 03:45
  • 2
    , Это будет также иметь тот же эффект в тех обеих из тех команд, вместе все еще пропустит файлы в том одном мелком окне 24 несколько часов назад. –  Octopus 19.09.2014, 23:21
  • 3
    $(()) простой синтаксис арифметики оболочки, это не характерно для Bash, cf. pubs.opengroup.org/onlinepubs/009695399/utilities / … –  Josip Rodin 22.07.2015, 23:28
  • 4
    @JosipRodin, нет, не обязательно верный! This chapter describes the syntax of that command language as it is used by the sh utility and [...]. Так как Bash является "расширенным" SH, он поддерживает этот синтаксис, но некоторые другие оболочки не делают, например, csh/tcsh. –  t0r0X 29.01.2016, 19:18
  • 5
    @t0r0X, которым моя точка была то, что это не bashism, скорее это работает в тире и zsh и независимо от того, что служит стандартным /bin/sh. –  Josip Rodin 29.01.2016, 23:49

Дробные 24-часовые периоды усечены! Это означает, что "найти -mtime +1" говорит о совпадении файлов, измененных два или более дня назад.

find . -mtime +0 # find files modified greater than 24 hours ago
find . -mtime 0 # find files modified between now and 1 day ago
# (i.e., in the past 24 hours only)
find . -mtime -1 # find files modified less than 1 day ago (SAME AS -mtime 0)
find . -mtime 1 # find files modified between 24 and 48 hours ago
find . -mtime +1 # find files modified more than 48 hours ago

Следующее может работать только в GNU?

find . -mmin +5 -mmin -10 # find files modified between
# 6 and 9 minutes ago
find / -mmin -10 # modified less than 10 minutes ago
50
27.01.2020, 19:29

-mtime N означает файлы, возраст которых A в днях удовлетворяет NA < N+1. Другими словами, -mtime N выбирает файлы, которые были в последний раз изменены между N и N+1 днями ранее.

-mtime -N означает файлы, возраст которых A удовлетворяет A < N, т.е. файлы, изменённые менее N дней назад. Менее интуитивно понятно, что -mtime +N означает файлы, возраст которых A удовлетворяет N+1 ≤ A, т.е. файлы, измененные не менее N+1 дня назад.

Например, -mtime 1 выбирает файлы, которые были изменены 1-2 дня назад. -mtime +1 выбирает файлы, которые были изменены не менее 2 дней назад. Для получения файлов, изменённых не менее 1 дня назад, используйте -mtime +0.

Описание "был последний раз модифицирован n*24 часа назад" - это всего лишь приближение, и не очень понятное.

Если эти правила вам трудно запомнить, используйте вместо них справочный файл.

touch -d '1 day ago' cutoff
find . -newer cutoff

(Синтаксис "1 день назад" требует GNU touch.)

.
20
27.01.2020, 19:29

Если вам нужны файлы с возрастом ровно 48 часов, а не 2 дня, вам следует добавить - daystart в свой ] команда find . Это вам поможет.

find . type -f -daystart -mtime +1
-2
27.01.2020, 19:29

Теги

Похожие вопросы