Вывод файлов по дате linux

Как найти недавно модифицированные файлы в Linux

Зачастую требуется найти файлы, которые были модифицированы/созданы недавно, или за какой-либо промежуток времени. Например, администратор изменял настройки системы, но забыл, где он их сохранил. Или вы хотите проверить изменялись ли, и как, ваши файлы. Если вам необходимо найти недавно измененные файлы в linux, это можно сделать с помощью команды find.

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

Вышеприведенная команда сортирует файлы в /etc (и поддиректориях) в обратном порядке по времени их изменения, и выводит отсортированный список вместе с их расположением в файловой системе и временем последнего изменения. Если вы также хотите проверить директории, опустите опцию «-type f».

Поиск файлов, которые были модифицированы в последние 60 минут в директории /target_directory и во всех ее поддиректориях:

Поиск файлов, которые были модифицированы в последние 2 дня в директории /target_directory и во всех ее поддиректориях:

Поиск файлов, которые были модифицированы в последние 2 дня в директории /target_directory и ее поддиректориях глубиной до 3 уровня:

Вы также можете задать диапазон времени модификации. Поиск файлов, которые были модифицированы в последние 7 дней, но не позднее чем 3 дня назад:

Все эти команды выводят только путь к найденным файлам. Вы можете также детализировать вывод информации с помощью опции «-exec».
Поиск файлов в директории /target_directory (и во всех ее поддиректориях), которые были модифицированы в последние 60 минут и вывод атрибутов файлов:

В качестве альтернативы вы можете использовать для этого команду xargs:

Обратите внимание, что эти команды найдут также файлы, созданные в заданный промежуток времени.

Источник

Вывод файлов по дате linux

Вот в Archlinux (локаль ru_RU.utf8):

  • 2.13 , Dan ( ?? ), 19:57, 30/04/2009 [^] [^^] [^^^] [ответить]
  • + / –
    а при чем тут BSD?
  • 3.21 , Просто Лось. ( ? ), 05:01, 03/05/2009 [^] [^^] [^^^] [ответить]
  • + / –
    При формате вывода ls.
    1.10 , sys ( ?? ), 17:01, 30/04/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    А если в имени файл будет такая дата?
    Используйте find — это логичнее.
    1.11 , bogus ( ?? ), 18:01, 30/04/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    гы гы гы, улыбнуло, больше нечего сказать.
    1.12 , Аноним ( — ), 18:16, 30/04/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Мда, find освоить не судьба. Чайники пишут mini-HOWTO на opennet?
    Файлы с пробелами в именах обработаны не будут.
    Пользуйтесь
    find . -type f -mtime -30 -print0 | xargs -0 cp -t targetdir/
    1.14 , Sergii Golovatiuk ( ? ), 03:07, 01/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Смотрю на эти сложности и радует что народ пробует все средства для достижения цели. Задача понятна, но решение не универсальное. А что, если надо скопировать данные только за 14-16 Января 2009?
    Используйте:
    find -mtime +$(expr $(expr $(date +%s) — $(date -d «Jan 14 2009» +%s)) / 3600 / 24) -mtime -$(expr $(expr $(date +%s) — $(date -d «Jan 16 2009» +%s)) / 3600 / 24) -type f -exec cp <> TARGET \;

    Если надо создать структуру каталогов:
    find -mtime +$(expr $(expr $(date +%s) — $(date -d «Jan 14 2009» +%s)) / 3600 / 24) -mtime -$(expr $(expr $(date +%s) — $(date -d «Jan 16 2009» +%s)) / 3600 / 24) -type d -exec mkdir TARGET/<> \;

  • 2.15 , Crazy Alex ( ? ), 15:28, 01/05/2009 [^] [^^] [^^^] [ответить]
  • + / –
    Чем ваять такое, проще скрипт в три строки на перле каком написать.
  • 3.17 , Проходил мимо ( ? ), 18:44, 01/05/2009 [^] [^^] [^^^] [ответить]
  • + / –
    Какойй перл?? проще ман по find почтать а не плодить велосипеды
    У вас много скриптов на пер/питоне/подставить_нужное на сервере крутится? или просто лениво для примитивных задачек освоить команду man ?
    P.S больше велосипедов,красивых и разных
  • 2.20 , Просто Лось. ( ? ), 04:59, 03/05/2009 [^] [^^] [^^^] [ответить]
  • + / –
    1. Несколько лет назад BSDшный date не умел показывать произвольные даты, сейчас не знаю. Такая штука канала только для GNU.

    2. Сравните скорость для большого, но обозримого количества файлов:
    $ for N in ‘seq 1 1 100000’ ; do echo «zzz» > ./$N.testfile ; done
    $ time find ./ -type f -mtime -1 -exec cp <> ../bbbbbb \;

    real 4m23.219s
    user 0m21.110s
    sys 3m47.518s
    $ time cp $(ls -1)
    $ mkdir ../cccccc
    $ time cp $(ls -1) ../cccccc/

    real 0m5.298s
    user 0m0.906s
    sys 0m3.995s
    $

    Но с мыслью я согласен, надо использовать find.
    $ time cp $(find ./ -type f -mtime -1) ../dddddd/

    real 0m5.502s
    user 0m0.747s
    sys 0m4.310s
    $

    1.18 , XoRe ( ok ), 16:49, 02/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Для разового копирования пойдет)

    А я бы сделал так:
    for a in ‘find . . ‘
    do
    [ -d $a ] && mkdir /home/temp/$a
    [ -f $a ] && cp $a /home/temp/$a
    done

    Хотя это кому как больше нравится/умеется/привычнее)

    Кстати не указано, файлы созданы за последний месяц, или измененные за последний месяц, или к ним был доступ за последний месяц.

    Хотя судя по тому, что используется ls -l, идет речь об изменении.

    bash: /bin/cp: Слишком длинный список аргументов

    Для реально большой кучи не канает.

    2.22 , XoRe ( ok ), 16:29, 03/05/2009 [^] [^^] [^^^] [ответить] + / –
    >ыы (
    >
    >bash: /bin/cp: Слишком длинный список аргументов
    >
    >Для реально большой кучи не канает.

    Значит нужен for — он и 1000000 элементов может обработать)

    3.23, vladis ( ? ), 19:55, 03/05/2009 [^] [^^] [^^^] [ответить] + / –
    Ыхыхы. Нифига.

    cp обламывается, потому что столько много аргументов не лезет в буфер командной строки шелла. for — [почти] точно такая же команда шелла с точно таким же буфером. Соответственно, for тоже обломается.

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

    ls -l . | awk <. >| while read f; do something $f; done

    4.25, Alex ( ?? ), 17:15, 12/05/2009 [^] [^^] [^^^] [ответить] + / –
    Супер. Воистину. Ровно стопицот (150000) файлов обработало.

    ls -tr /DIR1/DIR2/DIR3/* | while read f; . — все-таки обломалось.

    cd /DIR1/DIR2/DIR3/;
    ls -tr * | while read f; .

    Источник

    Поиск в Linux с помощью команды find

    Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

    Общий синтаксис

    путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

    набор правил, по которым выполнять поиск.

    * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

    Описание опций

    Тип объекта поиска. Возможные варианты:

    • f — файл;
    • d — каталог;
    • l — ссылка;
    • p — pipe;
    • s — сокет.
    Опция Описание
    -name Поиск по имени.
    -iname Регистронезависимый поиск по имени.
    -type
    -size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
    -mtime Время изменения файла. Указывается в днях.
    -mmin Время изменения в минутах.
    -atime Время последнего обращения к объекту в днях.
    -amin Время последнего обращения в минутах.
    -ctime Последнее изменение владельца или прав на объект в днях.
    -cmin Последнее изменение владельца или прав в минутах.
    -user Поиск по владельцу.
    -group По группе.
    -perm С определенными правами доступа.
    -depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
    -maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
    -prune Исключение перечисленных каталогов.
    -mount Не переходить в другие файловые системы.
    -regex По имени с регулярным выражением.
    -regextype Тип регулярного выражения.
    -L или -follow Показывает содержимое символьных ссылок (симлинк).
    -empty Искать пустые каталоги.
    -delete Удалить найденное.
    -ls Вывод как ls -dgils
    -print Показать найденное.
    -print0 Путь к найденным объектам.
    -exec <> \; Выполнить команду над найденным.
    -ok Выдать запрос перед выполнением -exec.

    Также доступны логические операторы:

    Оператор Описание
    -a Логическое И. Объединяем несколько критериев поиска.
    -o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
    -not или ! Логическое НЕ. Инвертирует критерий поиска.

    Полный набор актуальных опций можно получить командой man find.

    Примеры использования find

    Поиск файла по имени

    1. Простой поиск по имени:

    find / -name «file.txt»

    * в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

    2. Поиск файла по части имени:

    * данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

    3. Несколько условий.

    а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

    find . -name «sess_*» -a -name «*cd»

    б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

    find . -name «sess_*» -o -name «*cd»

    в) Более компактный вид имеют регулярные выражения, например:

    find . -regex ‘.*/\(sess_.*cd\)’

    * где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

    4. Найти все файлы, кроме .log:

    find . ! -name «*.log»

    * в данном примере мы воспользовались логическим оператором !.

    Поиск по дате

    1. Поиск файлов, которые менялись определенное количество дней назад:

    find . -type f -mtime +60

    * данная команда найдет файлы, которые менялись более 60 дней назад.

    2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

    а) дате изменения:

    find . -type f -newermt «2019-11-02 00:00»

    * покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

    find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

    * найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

    б) дате обращения:

    find . -type f -newerat 2019-10-08

    * все файлы, к которым обращались с 08.10.2019.

    find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

    * все файлы, к которым обращались в октябре.

    в) дате создания:

    find . -type f -newerct 2019-09-07

    * все файлы, созданные с 07 сентября 2019 года.

    find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

    * файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

    По типу

    Искать в текущей директории и всех ее подпапках только файлы:

    * f — искать только файлы.

    Поиск по правам доступа

    1. Ищем все справами на чтение и запись:

    find / -perm 0666

    2. Находим файлы, доступ к которым имеет только владелец:

    find / -perm 0600

    Поиск файла по содержимому

    find / -type f -exec grep -i -H «content» <> \;

    * в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

    С сортировкой по дате модификации

    find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

    * команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

    Лимит на количество выводимых результатов

    Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

    find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

    Поиск с действием (exec)

    1. Найти только файлы, которые начинаются на sess_ и удалить их:

    find . -name «sess_*» -type f -print -exec rm <> \;

    * -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

    2. Переименовать найденные файлы:

    find . -name «sess_*» -type f -exec mv <> new_name \;

    find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

    3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

    find . -name «*.tmp» | wc -l

    4. Изменить права:

    find /home/user/* -type d -exec chmod 2700 <> \;

    * в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

    5. Передать найденные файлы конвееру (pipe):

    find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

    * в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

    6. Произвести замену в файлах с помощью команды sed:

    find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

    * находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

    Чистка по расписанию

    Команду find удобно использовать для автоматического удаления устаревших файлов.

    Открываем на редактирование задания cron:

    0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

    * в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
    * полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

    Источник

    Читайте также:  Restart linux with command
    Оцените статью