Подтвердить что ты не робот

Рекурсивно найти все файлы, новее, чем заданное время

Учитывая time_t:

⚡ date -ur 1312603983
Sat  6 Aug 2011 04:13:03 UTC

Я ищу один

Что-то вроде

find . --newer 1312603983

Но с time_t вместо файла.

4b9b3361

Ответ 1

Это немного круто, потому что touch не принимает значение raw time_t, но оно должно сделать работу довольно безопасно в script. (Опция -r для 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

Ответ 2

Вы можете найти каждый файл, который был создан/изменен в последний день, используйте этот пример:

find /directory -newermt $(date +%Y-%m-%d -d '1 day ago') -type f -print

для поиска всего на прошлой неделе, используйте "1 неделю назад" или "7 дней назад", все, что вы хотите

Ответ 3

Возможно, кто-то сможет его использовать. Найти все файлы, которые были изменены в течение определенного периода времени рекурсивно, просто запустите:

find . -type f -newermt "2013-06-01" \! -newermt "2013-06-20"

Ответ 4

Вы также можете сделать это без файла маркера.

Формат% s на сегодняшний день - секунды с эпохи. find -mmin flag принимает аргумент за минуты, поэтому разделите разницу в секундах на 60. И "-" перед возрастом означает поиск файлов, последняя модификация которых меньше возраста.

time=1312603983
now=$(date +'%s')
((age = (now - time) / 60))
find . -type f -mmin -$age

С более новыми версиями gnu find вы можете использовать -newermt, что делает его тривиальным.

Ответ 5

Учитывая временную отметку unix (секунды с эпохи) 1494500000, выполните:

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' '{}' \;

Ответ 6

Итак, есть другой способ (и он в некоторой степени переносится _

(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 '{}'