
Я пытаюсь найти все файлы, которые не трогали в течение 6 месяцев или дольше. Я запустил эту команду, но она просто показывает все файлы, которые были отредактированы 6 месяцев назад.
find . -type f -mtime 183 -exec ls -latr {} \;
Как сделать так, чтобы это было 6 месяцев или больше?
решение1
-mtime 183
предназначено для файлов, возраст которых, округленный до следующего 24-часового периода, равен 183, то есть для возрастов, находящихся в диапазоне от 182*24*3600 секунд (не включая их) до 183*24*3600 секунд (включительно) (где секунды — это секунды Unix, то есть имеющие переменную длительность, которая составляет 86400-ю часть земных суток, а не фиксированную длительность секунды по определению ISO. Таким образом, все дни составляют 86400 секунд, и нам не нужно учитывать високосные секунды).
С помощью -mtime +183
вы получаете файлы, возраст которых, округленный до следующего 24-часового периода, строго больше 183, так что для возрастов строго больше 183*24*3600 секунд.
Обратите внимание, что 24-часовой период не обязательно совпадает сденьиз-за перехода на летнее время в некоторых регионах.
В некоторых find
реализациях (FreeBSD, GNU) можно также использовать ! -newermt '6 months ago'
. mt
сравнивает m
время модификации со t
временем, указанным в качестве аргумента.
Это даст файлы, измененные до того же дня месяца, того же часа 6 месяцев назад, но в случае GNU find
(в отличие от FreeBSD) он не делает корректировку летнего времени (в часовых поясах, где применяется летнее время), то есть он дает вам информацию, как будто в часовом поясе UTC. Если сейчас 2016-07-01 13:00 (летнее время), FreeBSD find
сообщит о файлах, которые были изменены в последний раз до 2016-01-01 13:00 (зимнее время), в то время как GNU find
сообщит о файлах, которые были изменены в последний раз до 2016-01-01 12:00 (зимнее время). Также могут быть вариации, когда вызов происходит 29-го, 30-го или 31-го числа месяца, а месяц 6 месяцев назад не имеет такой даты.
решение2
Добавьте +
перед значением дня. Из страницы руководства:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
и
... When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
Хотя это относится к atime
тесту, то же самое относится и к тестам mtime
и ctime
.