Как найти файл на сервере

Обновлено: 07.07.2024

SSH позволяет управлять аккаунтом напрямую на сервере. С его помощью можно собрать полную информацию о занятом дисковом пространстве и количестве файлов, а также, например, импортировать объемный дамп базы данных, работать с системой контроля версий git и проектами на Node.JS или Python.

После подключения вы увидите приглашение командной строки: [username@server

  • username — логин вашего аккаунта на хостинге;
  • server — имя сервера, на котором он размещен.

Для работы требуется знание команд. Они выглядят так: command -key argument

  • command — название команды;
  • -key — дополнительные опции (ключи);
  • argument — значение, с которым будет работать команда (путь до папки, фраза, которую нужно найти и т.д.).

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

Например, откроем руководство для ls: [username@server domains]$ man ls Чтобы выйти из режима справки, нажмите «q».

Команды для работы с файлами

ls — просмотр содержимого каталога

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

  • -l — вывести подробную информацию о файле;
  • -a — отобразить скрытые файлы;
  • -h — отобразить размер файла в удобном формате (по умолчанию выводится в байтах).

pwd — показать полный путь до директории

Команда выводит полный путь до каталога, в котором вы находитесь: [username@server domains]$ pwd
/home/username/domains

cd — переход по директориям

Для перехода между каталогами используйте команду cd. В качестве аргумента укажите путь до папки, куда нужно переместиться: [username@server

cd (без параметров) — перейти в домашний каталог: [username@server public_html]$ cd
[username@server

]$ pwd // Выводим путь до текущего каталога.
/home/username // Вернулись в домашний каталог пользователя username.

mkdir — создание папки

Команда имеет вид: mkdir путь_до_каталога, где «путь_до_каталога» — путь к создаваемой папке, в конце указывается ее имя.

Если вы создаете каталог в том же месте, где находитесь, полный путь указывать не нужно: [username@server

touch — создание файла

touch создаёт пустой файл с именем и расширением, которое вы укажете, или обновляет дату модификации существующего файла: [username@server domains]$ touch example.txt // Создаем файл example.txt в текущем каталоге.

// Проверяем:
[username@server domains]$ ls // Выводим список файлов.
example.txt // Файл example.txt создан.

rm — удаление папок и файлов

Для удаления файла достаточно указать путь до него: [username@server public_html]$ rm example.txt

Чтобы удалить директорию, используйте ключи -r (рекурсивно) и -f (без подтверждения): [username@server public_html]$ rm -rf example1

Очистить текущий каталог от всех файлов и папок можно с помощью команды: [username@server public_html]$ rm -rf *

cp — копирование файлов/папок

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

mv — перемещение или переименование файлов и папок

Синтаксис команды mv такой же как, и у cp (копирование). Укажите сначала полный путь до файла, который нужно перенести, а затем путь до каталога, куда будут перемещены данные.

Чтобы переименовать файл, введите сначала текущее имя, а затем — новое: [username@server public_html]$ ls // Выводим список файлов в текущем каталоге.
example.txt
[username@server public_html]$ mv example.txt primer.txt // Изменяем имя example.txt на primer.txt.

// Проверяем:
[username@server public_html]$ ls // Выводим список файлов.
primer.txt // Файл переименован.

wget — получение файлов со сторонних сайтов

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

scp — передача файлов с компьютера

Команда scp поможет передать файлы с вашего устройства на unix на аккаунт. Заранее устаналивать соединение по SSH для использования этой утилиты не нужно. Выполните команду: [user@mycomputer

Чтобы передать каталог, используйте ключ -r (рекурсивно):

du — получение информации о занятом дисковом пространстве

Чтобы читать результат работы команды было проще, добавьте ключи:

  • -s — вывести общий объем каталога;
  • -h — отобразить размер файла в удобном формате (Кб, Мб или Гб).

В качестве аргумента укажите символ «*»: команда посчитает размер каждого каталога и файла в директории: [username@server

]$ du -sh *
70M domains
4,0K example2
4,0K tmp
12K username_wor00.sql.bz2.gz
16K username_wor1.sql

find — поиск файлов/папок

Команда имеет вид: find путь_до_каталога -ключи , где «путь_до_каталога» — папка, с которой начинается поиск.

Рекомендуем ознакомиться с руководством (man) для find, так как она обладает обширным набором ключей. Мы рассмотрим основные:

  • -name — поиск файлов, имена которых соответствуют заданному шаблону;
  • -type — поиск файлов определенного типа:
    • f — обычный файл;
    • d — каталог;
    • l — символическая ссылка.

    Примеры

    Найти все файлы с расширением .php в текущем каталоге (обозначается символом «.») и подкаталогах: [username@server

    Найти все файлы с расширением .php, а также файлы, имена которых начинаются с точки в каталоге public_html: [username@server

    Найти все каталоги, имена которых начинаются с «w» в текущей папке: [username@server

    Количество файлов

    С помощью find можно посчитать количество файлов на аккаунте. Выполните команду: [username@server

    grep — поиск файлов по их содержимому

    Команда имеет вид: grep "текст" путь_до_файла, где «текст» — информация, которую нужно найти, «путь_до_файла» — путь к файлу, по которому производится поиск.

    stat — подробная информация о файле

    ln — создание ссылки на файл

    Чаще всего применяется для создания символических ссылок (ярлыков). Используйте их, если необходимо, например, изменить путь до корневой директории сайта.

    сhmod — изменение прав доступа

    Изменить права на файл или папку можно с помощью команды chmod xxx путь_до_файла , где xxx - права, «путь_до_файла» — путь до папки или файла. Чтобы изменить права и на папку, и на ее содержимое, добавьте ключ -R (рекурсивно).

    Пример

    [username@server domains]$ chmod -R 777 /home/username/example2 // Устанавливаем права 777 для папки example2 и ее содержимого.

    ]$ stat example2 // Смотрим статус.
    Файл: «example2»
    Доступ: (0777/drwxrwxrwx) // Права для каталога example2 изменены на 777.
    [username@server

    ]$ cd example2/ // Переходим в example2.
    [username@server example2]$ ls // Выводим содержимое каталога.
    copytest.txt example1
    [username@server example2]$ stat copytest.txt // Смотрим статус файла copytest.txt.
    Файл: «copytest.txt»
    Доступ: (0777/-rwxrwxrwx) // Права доступа к файлу изменены на 777.

    mc — Midnight Commander

    Midnight Commander — файловый менеджер с текстовым интерфейсом, встроенный в консоль. Для запуска введите в команду mc.


    Работа с базами данных

    mysql — подключение к базе данных

    Процесс подключения к базе данных с помощью команды mysql мы описали в статье.

    Импорт дампа базы данных

    mysql позволяет импортировать дамп базы данных, загруженный на дисковое пространство аккаунта. Выполните команду: [username@server domains]$ mysql -u db_username -p db_name < dump_name.sql где

    • db_username — имя пользователя базы данных;
    • db_name — название базы;
    • dump_name.sql — имя дампа.

    mysqldump — экспорт дампа БД

    Чтобы выгрузить дамп на дисковое пространство аккаунта выполните команду: [username@server domains]$ mysqldump -u db_username -p db_name > dump_name.sql Он будет помещен в каталог, из которого выполнялось действие.

    Работа с архивами

    Выбор команды для распаковки архива зависит от формата, в котором он создан: [username@server domains]$ unzip archive.zip
    [username@server domains]$ unrar x archive.rar
    [username@server domains]$ tar xf archive.tar
    [username@server domains]$ tar xfz archive.tar.gz
    [username@server domains]$ gunzip archive.gz
    [username@server domains]$ 7za x archive.7z

    Особенности

    Для команды rar обязательно укажите параметр «x», чтобы сохранить структуру.

    gunzip распаковывает файлы, после чего удаляет архив. Если нужно его сохранить, создайте копию на дисковом пространстве аккаунта.

    crontab — планировщик Cron

    Настройте выполнение скриптов по расписанию с помощью планировщика Cron. Чтобы добавить новое задание, выполните: [username@server

    Выбор интерпретатора зависит от скрипта, который нужно выполнить. Для php-скриптов подойдет php, curl или wget, для Python или Node.js — python или node соответственно.

    Чтобы узнать путь до нужного интерпретатора, выполните команду: [username@server

    Сохраните изменения в редакторе vim. Нажмите Esc и введите «:q!»

    Вместо php укажите имя интерпретатора.

    idn — преобразование домена в Punycode

    Чтобы перевести IDN-домен в Punycode, выполните команду: [username@server

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

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

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

    Конечно, поиск файла по имени – самый очевидный способ найти нужный файл.

    Для этого используйте:

    find -name "query"

    Данная команда чувствительна к регистру (то есть, она воспринимает файлы с именем file и File как два разных файла).

    Чтобы найти файл по имени без учета регистра, наберите:

    find -iname "query"

    Чтобы найти файлы, которые не совпадают с определенным шаблоном, нужно инвертировать поиск при помощи флагов -not или метасимвола «!». Обратите внимание, при использовании «!» нужно избегать символов, чтобы оболочка bash не интерпретировала «!» еще до выполнения команды find.

    find -not -name "query_to_avoid"

    find \! -name "query_to_avoid"

    Поиск по типу файла

    При помощи параметра «-type» можно указать тип необходимого файла. Это работает так:

    find -type type_descriptor query

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

    • f: обычный файл;
    • d: каталог;
    • l: символическая ссылка;
    • c: символьные устройства;
    • b: блочные устройства.

    К примеру, чтобы найти в системе все символьные устройства, нужно выполнить команду:

    find / -type c
    /dev/parport0
    /dev/snd/seq
    /dev/snd/timer
    /dev/autofs
    /dev/cpu/microcode
    /dev/vcsa7
    /dev/vcs7
    /dev/vcsa6
    /dev/vcs6
    /dev/vcsa5
    /dev/vcs5
    /dev/vcsa4
    . . .

    Чтобы найти все файлы, которые заканчиваются на .conf, используйте:

    find / -type f -name "*.conf"
    /var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf
    /usr/share/base-files/nsswitch.conf
    /usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf
    /usr/share/rsyslog/50-default.conf
    /usr/share/adduser/adduser.conf
    /usr/share/davfs2/davfs2.conf
    /usr/share/debconf/debconf.conf
    /usr/share/doc/apt-utils/examples/apt-ftparchive.conf
    . . .

    Фильтрация по времени и размеру

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

    Размер файла

    Чтобы отфильтровать файлы по размеру, используйте параметр -size.

    Также нужно внести суффикс в конце значения, чтобы указать размер:

    Чтобы найти файлы размером ровно в 50 байт, наберите:

    Чтобы найти файлы, размер которых меньше 50 байт, используйте символ «-» перед значением:

    Соответственно, чтобы найти файлы, размер которых превышает 700 мегабайт, используйте перед значением символ +; команда имеет такой вид:

    Поиск в зависимости от времени

    Linux хранит данные о access time, modification time и change time.

    • access time: время последнего обращения к файлу (когда файл был прочитан или дописан);
    • modification time: время последнего изменения содержимого файла;
    • change time: время последнего изменения инода (inode) файла.

    Для фильтрации файлов по времени используйте параметры «-atime», «-mtime» и «-ctime» соответственно.

    Значение данного параметра указывает, сколько дней назад был изменен файл. Как и в случае с размером файла, можно использовать символы – и +, чтобы получить файлы, измененные меньше чем или больше чем n дней назад.

    То есть, чтобы найти файл, содержимое которого было изменено 1 день назад, используйте:

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

    Чтобы найти файлы, иноды которых были изменены более трех дней назад, введите:

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

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

    Кроме того, команда find может сравнивать файлы и выводить более новые из них:

    find / -newer myfile

    Поиск по владельцу и привилегиям

    С помощью команды find файлы можно искать по владельцу или правам на файл.

    Для того используются параметры –user, –group, и -perm соответственно. Например, чтобы найти файл, принадлежащий пользователю с именем syslog, наберите:

    find / -user syslog

    Аналогично, чтобы вывести файлы, принадлежащие группе shadow, используйте:

    find / -group shadow

    Также можно искать файлы с особыми привилегиями.

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

    Данная строка выведет все файлы с такими правами.

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

    Это вернет все файлы с дополнительными привилегиями (например, файл с привилегиями 744).

    Фильтрация файлов по глубине

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

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

    Чтобы ознакомиться с только что созданной структурой и проверить, все ли создано правильно, используйте команды ls и cd. Затем вернитесь в тестовый каталог test:

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

    find -name file1
    ./level1dir7/level2dir8/level3dir9/file1
    ./level1dir7/level2dir8/level3dir3/file1
    ./level1dir7/level2dir8/level3dir4/file1
    ./level1dir7/level2dir8/level3dir1/file1
    ./level1dir7/level2dir8/level3dir8/file1
    ./level1dir7/level2dir8/level3dir7/file1
    ./level1dir7/level2dir8/level3dir2/file1
    ./level1dir7/level2dir8/level3dir6/file1
    ./level1dir7/level2dir8/level3dir5/file1
    ./level1dir7/level2dir8/file1
    . . .

    Эта команда вывела достаточно объемный результат. Передав этот результат в счетчик, можно увидеть, что в итоге выведено 1111 файлов.

    find -name file1 | wc -l
    1111

    Конечно, в большинстве случаев этот вывод слишком объемный и неудобный. Попробуйте сузить его.

    Для этого можно использовать параметр –maxdepth, чтобы задать максимальную глубину поиска:

    find -maxdepth num -name query

    Чтобы найти file1 в каталогах level1 и выше, укажите максимальную глубину 2 (1 для каталога верхнего уровня и 1 для каталогов level1).

    find -maxdepth 2 -name file1
    ./level1dir7/file1
    ./level1dir1/file1
    ./level1dir3/file1
    ./level1dir8/file1
    ./level1dir6/file1
    ./file1
    ./level1dir2/file1
    ./level1dir9/file1
    ./level1dir4/file1
    ./level1dir5/file1
    ./level1dir10/file1

    Как видите, данный результат имеет гораздо более удобный вид.

    Кроме того, можно указать минимальную глубину поиска:

    find -mindepth num -name query

    Это используется для поиска файлов, которые находятся в конце ветвей каталога:

    find -mindepth 4 -name file
    ./level1dir7/level2dir8/level3dir9/file1
    ./level1dir7/level2dir8/level3dir3/file1
    ./level1dir7/level2dir8/level3dir4/file1
    ./level1dir7/level2dir8/level3dir1/file1
    ./level1dir7/level2dir8/level3dir8/file1
    ./level1dir7/level2dir8/level3dir7/file1
    ./level1dir7/level2dir8/level3dir2/file1
    . . .

    Опять же, данный результат будет содержать огромное количество файлов (1000).

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

    find -mindepth 2 -maxdepth 3 -name file
    ./level1dir7/level2dir8/file1
    ./level1dir7/level2dir5/file1
    ./level1dir7/level2dir7/file1
    ./level1dir7/level2dir2/file1
    ./level1dir7/level2dir10/file1
    ./level1dir7/level2dir6/file1
    ./level1dir7/level2dir3/file1
    ./level1dir7/level2dir4/file1
    ./level1dir7/file1
    . . .

    Выполнение и объединение команд

    Утилита find позволяет выполнять любую вспомогательную команду на все найденные файлы; для этого используется параметр –exec. Базовый синтаксис выглядит так:

    find параметры_поиска -exec команда_и_параметры <> \;

    Символы <> используются в качестве заполнителя для найденных файлов. Символы \; используются для того, чтобы find могла определить, где заканчивается команда.

    Для примера можно найти файлы с привилегиями 644 (как в предыдущем разделе) и изменить их привилегии на 664:

    /test
    find . -perm 644 -exec chmod 664 <> \;

    Затем можно сменить привилегии каталога:

    find . -perm 755 -exec chmod 700 <> \;

    Чтобы связать несколько результатов, используйте команды -and или -or. Команда –and предполагается, если она опущена.

    find . -name file1 -or -name file9

    Поиск файлов с помощью команды locate

    Команда locate является альтернативой для find. Данная команда, как правило, работает быстрее и может легко производить поиск по всей файловой системы.

    Установить эту команду можно при помощи с apt-get:

    sudo apt-get update
    sudo apt-get install mlocate

    Но почему команда locate быстрее, чем find? Дело в том, что locate зависит от базы данных файлов в файловой системе.

    Как правило, cron-скрипт обновляет эту базу данных раз в день; но ее можно обновить и вручную. Запустите эту команду:

    Запомните: БД нужно регулярно обновлять, чтобы она содержала актуальные данные; в противном случае найти недавно полученные или созданные файлы будет невозможно.

    Чтобы найти файлы с помощью команды locate, просто используйте следующий синтаксис:

    Полученный результат также можно фильтровать.

    К примеру, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы выводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно использовать флаг –b (чтоб искать только basename, базовое имя файла):

    Чтобы команда locate возвращала только файлы, которые все еще существуют в файловой системе (то есть, файлы, которые не были удалены в промежутке между последним запуском updated и текущим вызовом locate), используйте флаг –е:

    Чтобы просмотреть статистику, занесенную командой locate в каталог, используйте опцию –S:

    locate -S
    Database /var/lib/mlocate/mlocate.db:
    3,315 directories
    37,228 files
    1,504,439 bytes in file names
    594,851 bytes used to store database

    Итоги

    Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Каждая из этих утилит имеет свои преимущества.

    Несмотря на то, что команды find и locate сами по себе очень мощны, их действие можно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте фильтровать их результаты при помощи команд wc, sort и grep.

    FTP (или его защищённый вариант – SFTP) доступ применяется для удалённой работы с файлами и папками. Это довольно популярный протокол, который по сей день активно используется в задачах операций с файлами и папками, что находятся на удалённых компьютерах (серверах).

    Но помимо загрузки, выгрузки и копирования, порой возникает задача осуществления поиска конкретных файлов и папок, что расположены среди множества таковых на удалённом устройстве, с которым работа ведётся по FTP протоколу передачи данных.

    И данная задача решается достаточно просто, давайте рассмотрим типовой способ.

    Ищем файлы и папки с использованием протокола передачи данных FTP или SFTP

    Получить доступ к файлам и папкам, что располагаются на удалённом устройстве, который в свою очередь поддерживает FTP протокол, можно с помощью соответствующего клиента. В данном конкретном примере мы воспользуемся весьма функциональным клиентом – FlashFXP.

    1. Скачайте и установите его, либо воспользуйтесь портативной версией, которая также существует и доступна к скачиванию с сайта разработчика.
    2. Запустите приложение и создайте подключение, воспользовавшись для этого пунктом Сайты -> Менеджер сайтов…

    Также в находящихся там вкладках Дата и Подробно при необходимости можно указать временной диапазон (создание \ модификация), примерный размер для искомых файлов и папок, указать, что поиск должен осуществляться конкретно среди папок, или среди файлов, установить глубину поиска.

    И в завершении нажать по кнопке Поиск, дабы запустить процедуру поиска.

    Как вы понимаете, описываемым клиентом поиск необходимых вам файлов и папок по протоколу FTP или SFTP не ограничивается, существует множество других программных решений, которыми можно воспользоваться, дабы осуществить необходимую задачу поиска. Работают они по аналогичному принципу, вам лишь остаётся выбрать описываемое решение, или подобрать какое-то другое, которое наиболее приглянется лично вам интерфейсом и\или дополнительным функционалом.

    Мы рады, что смогли помочь Вам в решении поставленной задачи или проблемы.

    В свою очередь, Вы тоже можете нам очень помочь.

    Просто поделитесь статьей в социальных сетях и мессенджерах с друзьями.

    Поделившись результатами труда автора, вы окажете неоценимую помощь как ему самому, так и сайту в целом. Спасибо!

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

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

    find <где искать> <опции>

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

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

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

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

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

    • f — файл;
    • d — каталог;
    • l — ссылка;
    • p — pipe;
    • s — сокет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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. Ищем все справами на чтение и запись:

    find / -perm 0666

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

    find / -perm 0600

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

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

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

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

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

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

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

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

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

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

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

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

    find . -name "sess_*" -type f -exec 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 для поиска строки 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 системах он может располагаться в разных местах.

    Читайте также: