Linux все файлы с определенной датой

Linux: использование find для поиска файлов старше

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

Я не могу найти что-либо на find странице руководства, чтобы сделать это, только для сравнения с временем других файлов или для проверки различий между созданным временем и сейчас. Является ли создание файла с нужным временем и сравнение с этим единственным способом сделать это?

Если у вас есть только «-newer file», вы можете обойти это:

Предполагая, что у вашего касания есть эта опция (у меня сенсорный 5.97).

Нет, вы можете использовать строку даты / времени.

-newerXY reference
Сравнивает временную метку текущего файла со ссылкой. Ссылочным аргументом обычно является имя файла (и для сравнения используется одна из его временных меток), но это также может быть строка, описывающая абсолютное время. X и Y являются заполнителями для других букв, и эти буквы выбирают, какое время относится к тому, как ссылка используется для сравнения.

Не имеет прямого отношения к вопросу, но может быть интересным для тех, кто спотыкается здесь.

Команда find напрямую не поддерживает параметр -older для поиска файлов старше определенной даты, но вы можете использовать оператор отрицания (используя пример принятого ответа):

вернет файлы старше указанной даты.

Источник

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

    Показанные далее команды создадут каталоги или файлы с именами с текущей датой или временем на основе часов вашего компьютера.

    Создание каталогов или файлов с именами текущей даты / времени / месяца / года на Linux

    Чтобы создать каталог и назвать его текущей датой, просто запустите:

    Эта команда создаст каталог и назовет его сегодняшней датой в формате dd: mm: yyyy.

    Создание каталогов или файлов с произвольным именем с текущей датой

    Как насчет пользовательского имени для каталога или файла с датой / временем / месяцем / годом?

    Это также возможно.

    Создание каталогов файлов в формате ISO

    Если вы хотите использовать формат даты ISO (например, 2020-06-06), запустите:

    Все вышеперечисленные три команды дают одинаковый результат.

    Для создания файлов просто замените mkdir командой «touch».

    Больше примеров

    Если вы хотите только день текущей даты, используйте:

    Эта команда создаст каталог только с текущим днем в имени. т.е. 06.

    Точно так же вы можете создавать каталоги с именем текущего месяца только в имени:

    Обратите внимение что S – заглавная

    Чтобы назвать каталог с текущими минутами, используйте заглавную M:

    Во всех приведенных выше примерах мы создали каталоги с номерами на их именах.

    Что если вы хотите назвать каталоги с фактическим названием текущего дня / месяца, например, Saturday, October и т. д.?

    Добавить комментарий Отменить ответ

    • Свежие записи

    • Категории

    • itsecforu.ru

    • Страны посетителей

    IT is good

    Источник

    linux-notes.org

    Иногда, нужно найти все измененные файлы или папки в Unix/Linux ОС и в моей статье «Поиск последних измененных файлов/папок в Unix/Linux» я расскажу как это сделать.

    Чтобы найти все файлы, которые были изменены с момента определенного времени (т.е. час назад, день назад, 24 часа назад и так далее) в Unix и Linux имеется команда find и она очень пригодиться для таких целей.
    Чтобы найти все файлы, которые были изменены в течение последних 24 часов (последний полный день) в текущем каталоге и в его подкаталогах, используйте:

    Опция «-mtime -1» сообщает команде find искать модифицированные файлы за последние сутки (24 часа).
    Опция «-print» сообщает «find» выводить файлы и их пути (где они лежат) и данную команду можно заменить на «-ls» если нужно вывести подробную информацию о файле.

    Примеры:

    Например нужно найти файлы, что были изменены за последние 30 минут в папке /home/captain:

    И приведу пример подобного, но для папки:

    Например нужно найти измененные файлы за 5 дней, но не включать в поиск вчерашний день (за последний день):

    Для полного счастья, можно вывести время модификации и отсортировать по нему:

    Чтобы ограничить уровень вложенности, добавьте параметр «-depth». Например, поиск с уровнем вложенности не более 3 папок:

    Поиск файлов в /home/captain директории (и во всех ее подпапках) которые были изменены в течение последних 60 минут, и вывести их атрибуты:

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

    Поиск последних измененных файлов/папок в Unix/Linux завершен.

    Добавить комментарий Отменить ответ

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

    Источник

    Поиск в 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 системах он может располагаться в разных местах.

    Источник

    Читайте также:  Nox multidrive mac os
    Оцените статью