как я регистрируюсь в ударе, был ли файл создан больше, чем x время назад?

Попробуйте что-то вроде этого:

template
std::vector merge(std::initializer_list*> vecs)
{
    size_t size = 0;
    for(auto v : vecs) { size += v->size(); }
    std::vector ret;
    ret.reserve(size);
    for(auto v : vecs) { ret.insert(ret.end(), v->begin(), v->end()); }
    return ret;
}

std::vector a = {"a", "b"};
std::vector b = {"c", "d"};
std::vector c = {"e", "f"};
std::vector d = {"g", "h"};

std::vector newVector = merge({&a, &b, &c, &d});

Live Demo

Альтернативно:

template
std::vector merge(std::initializer_list>> vecs)
{
    size_t size = 0;
    for(auto &v : vecs) { size += v.get().size(); }
    std::vector ret;
    ret.reserve(size);
    for(auto &v : vecs) { ret.insert(ret.end(), v.get().begin(), v.get().end()); }
    return ret;
}

[1110 ]

std::vector a = {"a", "b"};
std::vector b = {"c", "d"};
std::vector c = {"e", "f"};
std::vector d = {"g", "h"};

std::vector newVector = merge({std::cref(a), std::cref(b), std::cref(c), std::cref(d)});

Live Demo

94
задан Guss 4 March 2018 в 10:32
поделиться

4 ответа

Только в течение времени изменения

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

Или, то же в одной строке:

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

можно использовать -cmin для изменения или -amin в течение времени доступа. Поскольку другие указали на меня, don’t думают, что можно отследить время создания.

122
ответ дан Sergey 24 November 2019 в 06:03
поделиться

Время создания не хранится.

, Что хранится, три метки времени (обычно, они могут быть выключены в определенных файловых системах или определенными опциями файловой системы):

  • Прошлое время доступа
  • время Последнего изменения
  • В прошлый раз изменения

"Изменение" в файле считается, когда разрешение изменяется, переименуйте и т.д., В то время как модификация является содержанием только.

16
ответ дан Philip Reynolds 24 November 2019 в 06:03
поделиться

Считайте результат инструмента 'статистикой':

  File: `infolog.txt'
  Size: 694         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 11635578    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     fdr)   Gid: ( 1000/     fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800

Вы видите здесь, что эти три даты Получают доступ/изменяют/изменяют. Нет никакой созданной даты. Можно только действительно быть уверены, когда содержание файла было изменено ("изменить" поле) или его измененный inode (поле "изменения").

Примеры того, когда оба поля обновляются:

"Изменяют", будет обновлен, если кто-то связал дополнительную информацию в конец файла.

"Изменение" будет обновлено если кто-то измененные полномочия через chmod.

3
ответ дан fdr 24 November 2019 в 06:03
поделиться

Использование stat для определения даты последней модификации файла, date для определения текущего времени и либерального использования башизмов, можно выполнить желаемый тест на основе времени последнего изменения файла 1 .

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

Хотя код немного менее читабелен, чем подход find , я думаю, что он лучше затем выполните команду find , чтобы просмотреть файл, который вы уже "нашли". Кроме того, манипулирование датами - это весело; -)


  1. Как правильно заметил Фил, время создания не записывается, но используйте % Z вместо % Y ниже, чтобы получить «время изменения», которое может быть то, что вы хотите.

[Обновление]

Для пользователей Mac используйте stat -f "% m" $ somefile вместо синтаксиса Linux, описанного выше

21
ответ дан 24 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

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