Linux как найти файл не старше

Linux как найти файл не старше

Используйте утилиту find для поиска файлов в дереве каталогов по имени файла. Укажите имя дерева каталогов для поиска, а затем, с помощью опции `-name’ — имя нужного Вам файла.

Чтобы увидеть список всех файлов системы, которые называются `top’, наберите:

$ find / -name top [Enter]

Эта команда проведет поиск во всех каталогах, куда Вам разрешен доступ; если Вы не имеете прав прочесть содержимое каталога, find сообщить, что поиск в данном каталоге Вам запрещен.

Опция `-name’ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname’.

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

$ find / -iname top [Enter]

Эта команда найдет все файлы, название которых состоит из букв `top’ — включая `Top’, `top’, и `TOP’.

Для поиска файлов, имена которых совпадают с определенным образцом, удобно использовать метасимволы. Образцы имен нужно указывать в одинарных кавычках.

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, введите:

$ find / -name ‘top*’ [Enter]

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют еще три символа, введите:

$ find / -name ‘top. ‘ [Enter]

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют пять и более символов, введите:

$ find / -name ‘top. *’ [Enter]

Чтобы увидеть все файлы с расширением `.tex’в Вашем рабочем каталоге, независимо от их написания, введите:

-iname ‘*.tex’ [Enter]

Чтобы увидеть все файлы в каталоге `/usr/share’, содержащие в имени слово `farm’, введите:

$ find /usr/share -name ‘*farm*’ [Enter]

Используйте `-regex’ вместо `-name’ для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк.

Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку `net’ или `comm’, наберите:

Примечание: Опция `-regex’ совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.

Чтобы найти файлы определенного размера, используйте опцию `-size’, указав после нее требуемый размер файла. Размер файла может быть задан в трех различных формах: если перед ним указан знак плюс (`+’), ищутся все файлы, большие, чем указанный размер; если указан знак минус (`-‘), ищутся все файлы, меньшие, чем указанный размер; если префикс не указан, ищутся файлы точно указанного размера. (Единица измерения — блок 512 байт; символ `k’ после размера указывает килобайты, символ `b’ — байты.)

Чтобы вывести список файлов в каталоге `/usr/local’, размер которых больше 10,000 килобайт, введите:

$ find /usr/local -size +10000k [Enter]

Чтобы вывести список файлов в домашнем каталоге, размер которых меньше 300 байт, введите:

-size -300b [Enter]

Чтобы вывести список файлов системы, размер которых составляет 42 блока по 512 байт, наберите:

$ find / -size 42 [Enter]

Используйте опцию `-empty’ для поиска пустых файлов — т.е. файлов с размером 0 байт. Это полезно для поиска и удаления ненужных файлов.

Чтобы найти все пустые файлы в Вашем домашнем каталоге, введите:

Чтобы найти файлы, модифицированные в определенное время, используйте команду find с опциями `-mtime’ или `-mmin’; аргумент опции `-mtime’ определяет количество прошедших суток (24 часа), а аргумент `-mmin’ — количество прошедших минут.

Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные точно 24 часа назад, введите:

$ find /usr/local -mtime 1 [Enter]

Чтобы вывести все файлы в каталоге `/usr’, модифицированные 5 минут назад, введите:

$ find /usr -mmin 5 [Enter]

Если Вы хотите указать промежуток времени, поставьте перед числом либо знак плюс (`+’), определяя большее или равное аргументу время, или знак минус (`-‘), определяя время, меньшее или равное аргументу.

Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные в течение последних 24 часов, введите:

$ find /usr/local -mtime -1 [Enter]

Опция `-daystart’ определяет отсчет времени с момента начала текущих суток.

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные вчера, введите:

-mtime 1 -daystart [Enter]

Читайте также:  Файловый архив для windows

Чтобы вывести все файлы в каталоге `/usr’, модифицированные в течение года, введите:

$ find /usr -mtime +356 -daystart [Enter]

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные в период от 2 до 4 дней тому назад, наберите:

-mtime 2 -mtime -4 -daystart [Enter]

Чтобы найти файлы, которые новее некоторого файла, введите его имя в качестве аргумента опции `-newer’.

Чтобы вывести все файлы в каталоге `/etc’, которые новее файла `/etc/motd’, введите:

$ find /etc -newer /etc/motd [Enter]

Чтобы найти все файлы новее определенной даты, используйте следующий трюк: создайте временный файл в каталоге `/tmp’ и установите дату его модификации на требуемую с помощью touch, а затем поределите его как аргумент для `-newer’.

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные после 4 мая текущего года, введите:

Чтобы найти файлы, принадлежащие определенному пользователю, укажите имя пользователя в качестве агрумента опции `-user’. Например, для поиска всех файлов в каталоге `/usr/local/fonts’, принадлежащих пользователю warwick, наберите:

$ find /usr/local/fonts -user warwick [Enter]

Опция `-group’ подобным образом определяет файлы, принадлежащие некоторой группе пользователей.

Чтобы вывести список файлов в каталоге `/dev’, принадлежащих группе audio, введите:

$ find /dev -group audio [Enter]

Вы можете использовать команду find для выполнения других команд над найденными файлами, указав требуемые команды в качестве аргуентов опции `-exec’. Если Вы используететв команде строку `»’, эта строка в команде будет заменена именем текущего найденного файла. Окончание команды помечается строкой `’;».

Чтобы найти все файлы в каталоге ` /html/’ с расширением `.html’, и вывести строки из этих файлов, содержащие слово `organic’, введите:

/html/ -name ‘*.html’ -exec grep organic ‘<>‘ ‘;’ [Enter]

Чтобы ввести подтверждение выполнения команды для файла, найденного find, используйте ключ `-ok’ вместо `-exec’.

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

-used +365 -ok rm ‘<>‘ ‘;’ [Enter]

Вы можете определить несколько опций find одновременно, чтобы найти файлы, удовлетворяющие сразу нескольким критериям.

Чтобы вывести список файлов в Вашем домашнем каталоге, имена которых начинаются со строки `top’, и которые новее файла `/etc/motd’, введите:

-name ‘top*’ -newer /etc/motd [Enter]

Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения `.gz’), введите:

-size +2000000c -regex ‘.*[^gz]’ -exec gzip ‘<>‘ ‘;’ [Enter]

Чтобы найти наибольший файл в каталоге, используйте команду ls с опцией `-S’, которая сортирует файлы в нисходящем порядке по размеру (обычно ls выводит список файлов по алфавиту). Добавьте опцию `-l’, чтобы вывести размер и другие атрибуты файла.Пример:

Чтобы вывести оглавление каталога, начав с файлов наименьшего размера, используйте ls с ключами `-S’ и `-r’, которые сортируют вывод в обратном порядке.Пример:

Чтобы вывести список каталогов, отсортированных по размеру — то есть размеру всех содержащихся в них файлов — используйте du и sort. Команда du выводит список каталогов в восходящем порядке, начиная с самого маленького; опция `-S’ помещает при выводе в первую колонку размер каталога в килобайтах. Укажите требуемое дерево каталогов в качестве аргумента du и перенаправьте вывод в команду sort с ключом `-n’, которая отсортирует список по числам.

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

$ du -S . sort -n [Enter]|

Если Вам нужно, чтобы первыми были указаны самые большие каталоги, используйте ключ `-r’:

$ du -S . sort -nr [Enter]|

Чтобы быстро определить количество файлов в каталоге, используйте ls и перенаправьте вывод в команду `wc -l’, которая выволит количество строк, пришедших на ее вход.

Для вывода общего количества файлов в текущем каталоге введите:

Общее количество файлов — 19.

Поскольку ls по умолчанию не показывает скрытые файлы, приведенная выше команда не будет их учитывать. Опция `-A’ для ls позволит посчитать обычные и скрытые файлы:

Чтобы посчитать количество файлов во всем дереве каталогов, а не только в отдельном каталоге, используйте find вместо ls, и укажите специальный ключ для find — строку `
! -type d’, чтобы исключить вывод и подсчет каталогов.

Чтобы вывести количество файлов в дереве `/usr/share’, введите:

$ find /usr/share \! -type d wc -l [Enter]|

Чтобы вывести количество файлов и каталогов в дереве `/usr/share’, введите:

$ find /usr/share wc -l [Enter]|

Читайте также:  Отличия файловой структуры linux от windows

Чтобы вывести количество каталогов в дереве `/usr/share’, введите:

$ find /usr/share \! -type f wc -l [Enter]|

Команда which позволяет Вам получить полный путь к приложению или другой команде, указав базовое имя файла в качестве опции. Это удобно, чтобы убедиться, что данное приложение или команда присутствуют в системе.

Чтобы определить, установлен ли в Вашей системе perl и где он расположен, введите:

Next: Средства управления файлами Up: Средства поиска файлов Previous: Поиск файлов с помощью Contents Index Alex Otwagin 2002-12-16

Источник

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

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

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

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

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

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

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

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

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

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

Источник

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

Источник

Читайте также:  Portable windows live usb
Оцените статью