Рекурсивно найти все файлы новее заданного времени
учитывая значение time_t:
⚡ date -ur 1312603983
Sat 6 Aug 2011 04:13:03 UTC
Я ищу bash one-liner, в котором перечислены все файлы новее. Сравнение должно учитывать часовой пояс.
что-то вроде
find . --newer 1312603983
но с time_t вместо файла.
6 ответов:
это немного окольный, потому что
touch
не принимает rawtime_t
значение, но он должен делать работу довольно безопасно в скрипте. (Тег доdate
присутствует в MacOS X; я не перепроверял GNU.) Переменной' time ' можно было бы избежать, написав подстановку команд непосредственно вtouch
командная строка.time=$(date -r 1312603983 '+%Y%m%d%H%M.%S') marker=/tmp/marker.$$ trap "rm -f $marker; exit 1" 0 1 2 3 13 15 touch -t $time $marker find . -type f -newer $marker rm -f $marker trap 0
вы можете найти каждый файл, который был создан / изменен в последний день, используйте этот пример:
find /directory -newermt $(date +%Y-%m-%d -d '1 day ago') -type f -print
для поиска всего на прошлой неделе, используйте '1 неделю назад' или '7 дней назад' все, что вы хотите
может быть, кто-то может использовать его. Найти все файлы, которые были изменены в течение определенного времени рекурсивно, просто запустите:
find . -type f -newermt "2013-06-01" \! -newermt "2013-06-20"
учитывая метку времени Unix (количество секунд с начала эпохи) в
1494500000
, do:find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)"
чтобы grep эти файлы для "foo":
find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)" -exec grep -H 'foo' '{}' \;
вы также можете сделать это без маркерный файл.
формат %s На сегодняшний день составляет секунды с момента эпохи. флаг find - mmin принимает аргумент в минутах, поэтому разделите разницу в секундах на 60. И " - " перед возрастом означает найти файлы, последняя модификация которых меньше возраста.
time=1312603983 now=$(date +'%s') ((age = (now - time) / 60)) find . -type f -mmin -$age
С новыми версиями gnu find вы можете использовать -newermt, что делает его тривиальным.
Так что есть другой способ (и он переносим в некоторой степени_
(python <<EOF import fnmatch import os import os.path as path import time matches = [] def find(dirname=None, newerThan=3*24*3600, olderThan=None): for root, dirnames, filenames in os.walk(dirname or '.'): for filename in fnmatch.filter(filenames, '*'): filepath = os.path.join(root, filename) matches.append(path) ts_now = time.time() newer = ts_now - path.getmtime(filepath) < newerThan older = ts_now - path.getmtime(filepath) > newerThan if newerThan and newer or olderThan and older: print filepath for dirname in dirnames: if dirname not in ['.', '..']: print 'dir:', dirname find(dirname) find('.') EOF ) | xargs -I '{}' echo found file modified within 3 days '{}'