Меню Рубрики

Linux поиск по дате создания файла

Поиск в 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»

* -a: логическое И, -o: логическое ИЛИ.

4. Найти все файлы, кроме .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. Ищем все справами на чтение и запись:

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

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

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

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, которая уже и выполнила поиск по содержимому данных файлов.

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

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

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

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

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

Источник

ProArenda.Com — Про Аренда Все

Часто у меня спрашивают: «как по SSH получить в перечень файлов созданных на определенную дату?» или «у меня есть папка с большим количеством файлов. нужно найти в этой папке файлы с определенной датой и поместить их в архив. Как это можно сделать?» Все очень просто, и сейчас мы разберем несколько часто встречающихся запросов.

В оболочках, основанных на Linux операционных системах, таких как Debian, Ubuntu, Redhat или Centos мы можем в консоле задать следующие команды и посмотреть их выполнение:

показать текущую директорию

перейти в директорию ‘/home1’

перейти в директорию уровнем выше

перейти в директорию двумя уровнями выше

перейти в домашнюю директорию

перейти в домашнюю директорию пользователя user1

перейти в директорию, в которой находились до перехода в текущую директорию

отобразить содержимое текущей директории

отобразить содержимое текущей директории с добавлением к именам символов, характеризующих тип

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

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

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

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

найти файлы и директории с именем file1. Поиск начать с корня (/)

найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)

find /home/user1 -name «*.php»

Найти все файлы и директории, имена которых оканчиваются на ‘. php ‘. Поиск начать с ‘/home/user1’

find /usr/cgi -type f -mtime -11

найти все файлы в ‘/usr/ cgi ‘, созданные или изменённые в течении последних 11 дней

find /usr/bin -type f -atime +300

найти все файлы в ‘/usr/bin’, время последнего обращения к которым более 300 дней

удалить файл с именем ‘file1’ и ‘file2’

удалить директорию с именем ‘dir1’

удалить директорию с именем ‘dir1’ и рекурсивно всё её содержимое

удалить две директории и рекурсивно их содержимое

Ну, и немного примеров:

подсчитать количество файлов в директории

ls -A | wc -l или find -type f | wc -l

находим все файлы в текущем каталоге и вывод отфильтровать по php и за дату Nov 2 2011 :

ls -alR | grep ‘Nov 2 2011’ | grep php или ls /home/user1 -alR | grep ‘Nov 2 2011’ | grep php

Внимательно смотрите на формат написания даты и количество пробелов

‘Nov . . 2 . . 2011’ ‘Nov.12 . . 2011’

Вы можете сначала дать команду без [| grep ‘ Nov 2 2011’ ] , затем скопировав дату и повторив ее уже с фильтром. Или find -type f -depth -1 | xargs ls -l | grep php

Если нужно не углубляться в подкаталоги ниже третьего уровня, используйте опцию -depth -3 :

ls -alR -depth -3 | grep ‘Nov 2 2011’

тоже самое, только с find:

find -type f -depth -3 | xargs ls -l | grep ‘Nov 2 2011’ | grep php

» | xargs ls -l » — задаем вывод атрибутов файла
» grep ‘что-то в строках вывода’ » — задаем фильтрование по строке

и такое имеет место (найти файлы с 26 по 28 октября 2016) (не у всякого хостера работает newermt ):

find ./ -newermt ‘Oct 26 2016’ \! -newermt ‘Oct 28 2016’ -ls или find -newermt ‘Oct 27 2016’

тогда найти все файлы созданные после создания файла config.php (определите у себя подходящий по дате)

find -type f -newer /home/user1/config.php | xargs ls -l | grep php

найти все файлы и вывод отфильтровать по ‘цифра.php’ :

find -type f | grep 3.php

найденное можно удалить вот так:

find -type f | xargs ls -l | grep ‘Nov 2 2011’ | grep php | xargs rm — f

find -type f | xargs ls -l | grep ‘Nov 2 2011’ | grep php — delete

find -type f | xargs ls -l | grep ‘Nov 2 2011’ | grep php — exec rm — f < >\ ;

или можете положить отобранные файлы в архив:

find /home/user1 -type f | xargs ls -l | grep ‘Nov 2 2011’ | grep php -exec tar -cvf archive.tar <> \;

find /home/user1 -newermt ‘Oct 27 2016’ | xargs tar -czvf файл.tar.gz

Ключи:
-name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.
-type — тип искомого: f=файл, d=каталог, l=ссылка (link).
-user — владелец: имя пользователя или UID.
-group — владелец: группа пользователя или GID.
-perm — указываются права доступа.
-size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
-atime — время последнего обращения к файлу.
-ctime — время последнего изменения владельца или прав доступа к файлу.
-mtime — время последнего изменения файла.
-newer другой_файл — искать файлы созданные позже, чем другой_файл.
-delete — удалять найденные файлы.
-ls — генерирует вывод как команда ls -dgils.
-print — показывает на экране найденные файлы.
-exec command <> \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
-ok — перед выполнением команды указанной в -exec, выдаёт запрос.
-depth — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
-prune — используется, когда вы хотите исключить из поиска определённые каталоги.
N — количество дней.

Такие рассуждения и команды можете использовать для поиска файлов на сервере с вредоносным кодом. Примеры часто обнаруженных угроз смотрите — Как обнаружить зараженные файлы на своем на сайте и хостинге?

Иногда может потребоваться найти самые большие файлы в директории:

ls -lSrh

find / -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk ‘

или в директории /home

find /home -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk ‘

Или самые большие папки (директории):

du -kx | egrep -v «\./.+/» | sort -n

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как изменить местоположение медиатеки фото mac os
  • Как изменить имя пользователя mac os
  • Как изменить имя компьютера на mac os
  • Как изменить иконку программы mac os
  • Как изменить иконку папки в mac os