Поиск файлов старше x дней в системе с урезанным занятым ящиком

9

Мне нужно найти и удалить файлы старше 1 недели в блоке разработки. На этом устройстве доступно ограниченное количество утилит. -mtime findПредикат не доступен. Как в этом случае проверить все файлы старше x дней?

Ravi
источник
2
Непонятно, что вы имеете в виду под « mtimeнедоступно». Это не утилита, имя которой я узнаю.
Кусалананда
/ path / to / my / folder $ find -type f -mtime +7 удалить найти: не распознано: -mtime
Рави
поделитесь дистрибутивом Linux, который вы используете.
Шива
3
Похоже, он занят без коробки FEATURE_FIND_MTIME. Является ли FEATURE_FIND_NEWERвключен? Работает ли find -newer? Ваша testутилита или [встроенная shподдержка -nt?
Стефан Шазелас
1
Вы можете обойти это, если вы можете использовать эти touch -d/ date +%sи[ file -nt other-file ]
Стефан Шазелас

Ответы:

11

-mtimeявляется стандартным предикатом find(вопреки -delete), но похоже, что у вас есть урезанная версия busybox, где FEATURE_FIND_MTIMEфункция была отключена во время сборки.

Если вы можете перестроить busybox с его включением, вы должны сделать:

find . -mtime +6 -type f -exec rm -f {} +

Или, если FEATURE_FIND_DELETEтакже включен:

find . -mtime +6 -type f -delete

Если нет, другие параметры могут быть использованы find -newer(при условии, что FEATURE_FIND_NEWERон включен) для файла, для которого задано время изменения в одну неделю.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Или , если -newerнет в наличии , но sh«S [поддерживает -nt:

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f
Стефан Шазелас
источник
1
Да, busybox был более легкой версией здесь. После перестройки find . -mtime +6 -type f -exec rm {} \;работал на меня
Рави
2

От man find:

- формат n

Последний раз к файлу обращались n * 24 часа назад. Когда команда find определяет, сколько 24-часовых периодов назад к файлу последний раз обращались, любая дробная часть игнорируется, поэтому для соответствия -atime +1 файл должен был быть получен как минимум два дня назад.

-время n

Статус файла был последний раз изменен n * 24 часа назад. См. Комментарии для -atime, чтобы понять, как округление влияет на интерпретацию времени изменения состояния файла.

В зависимости от вариантов использования файлов, которые вы хотите удалить, это ваши единственные другие варианты find. Почему mtimeнет в наличии? Какую файловую систему вы используете? Вы исследовали какие-либо другие варианты?

Onek
источник
Задавать дополнительные вопросы ФП следует как поясняющие комментарии , а не ответы .
Джефф Шаллер