Поиск файлов в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

К концу этого практического занятия вы сможете:

  • Использовать базовый синтаксис команды find
  • Искать файлы по определенным именам
  • Найти файлы на основе их размера
  • Комбинировать несколько критериев поиска

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/logical("Logic Operations") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/FileandDirectoryManagementGroup -.-> linux/wildcard("Wildcard Character") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") subgraph Lab Skills linux/echo -.-> lab-271283{{"Поиск файлов в Linux"}} linux/logical -.-> lab-271283{{"Поиск файлов в Linux"}} linux/ls -.-> lab-271283{{"Поиск файлов в Linux"}} linux/touch -.-> lab-271283{{"Поиск файлов в Linux"}} linux/mkdir -.-> lab-271283{{"Поиск файлов в Linux"}} linux/wildcard -.-> lab-271283{{"Поиск файлов в Linux"}} linux/find -.-> lab-271283{{"Поиск файлов в Linux"}} end

Исследование основ команды find

Команда find представляет собой мощный инструмент в Linux, который помогает искать файлы и каталоги в заданном месте. Базовый синтаксис команды find выглядит следующим образом:

find [starting-point] [options] [expression]

Где:

  • [starting-point] - это каталог, с которого find должен начать поиск
  • [options] контролируют, как выполняется поиск
  • [expression] определяет критерии для выбора файлов

Создадим структуру каталогов для практики. Откройте терминал и выполните следующие команды:

mkdir -p ~/project/files/{documents,images,music}
touch ~/project/files/documents/{report.txt,notes.txt,project.pdf}
touch ~/project/files/images/{photo1.jpg,photo2.jpg,diagram.png}
touch ~/project/files/music/{song1.mp3,song2.mp3}

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

Теперь используем команду find для вывода списка всех файлов в каталоге files:

find ~/project/files -type f

Вы должны увидеть вывод, похожий на следующий:

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/project.pdf
/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg
/home/labex/project/files/images/diagram.png
/home/labex/project/files/music/song1.mp3
/home/labex/project/files/music/song2.mp3

В этой команде:

  • ~/project/files указывает, с какого места начинать поиск
  • -type f сообщает find искать только файлы (не каталоги)

Вы также можете использовать find для вывода списка только каталогов:

find ~/project/files -type d

В результате будет отображено:

/home/labex/project/files
/home/labex/project/files/documents
/home/labex/project/files/images
/home/labex/project/files/music

Опция -type d сообщает find искать только каталоги.

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

Одним из наиболее распространенных применений команды find является поиск файлов по их имени. Опция -name позволяет указать шаблон для сопоставления с именами файлов.

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

find ~/project/files -type f -name "*.txt"

Эта команда должна вернуть следующие результаты:

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt

В этой команде:

  • -name "*.txt" сообщает find искать имена файлов, оканчивающиеся на .txt
  • Символ * является символом подстановки, который соответствует любому количеству символов

Опция -name чувствительна к регистру. Если вы хотите искать файлы без учета регистра, используйте -iname вместо -name:

find ~/project/files -type f -iname "*.TXT"

Эта команда все равно найдет report.txt и notes.txt, даже если мы указали расширение в верхнем регистре.

Теперь попробуем найти конкретный файл. Создадим новый файл с уникальным именем:

touch ~/project/files/documents/important_report.txt

Для поиска этого конкретного файла используем следующую команду:

find ~/project/files -type f -name "important_report.txt"

Результат:

/home/labex/project/files/documents/important_report.txt

Вы также можете осуществлять поиск в определенных подкаталогах. Например, чтобы искать только в каталоге images:

find ~/project/files/images -type f -name "*.jpg"

Результат:

/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg

Эта команда осуществляет поиск только в каталоге images файлов с расширением .jpg.

Поиск файлов по размеру

Команда find также может осуществлять поиск файлов на основе их размера с использованием опции -size. Это полезно, когда вам нужно найти большие файлы, которые могут занимать много места на диске, или маленькие файлы, которые могут быть пустыми.

Сначала разберем синтаксис опции -size:

-size n[cwbkMG]

Где:

  • n - это число
  • Буквы обозначают единицы измерения: c (байты), w (слова по 2 байта), b (блоки по 512 байт), k (килобайты), M (мегабайты), G (гигабайты)
  • Префикс + перед n означает "больше, чем n", а - означает "меньше, чем n"

Добавим немного содержимого в наши файлы, чтобы они имели разный размер:

echo "This is a short text file." > ~/project/files/documents/notes.txt
for i in {1..100}; do
  echo "This is line $i of the important report." >> ~/project/files/documents/important_report.txt
done

Теперь найдем файлы размером меньше 100 байт:

find ~/project/files -type f -size -100c

В этот список могут войти некоторые наши пустые или почти пустые файлы.

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

find ~/project/files -type f -size +1k

В этот список должен войти файл important_report.txt, так как мы добавили в него 100 строк.

Вы также можете указать точный размер. Создадим файл размером ровно 50 байт:

echo -n "This is exactly 50 bytes long........................." > ~/project/files/documents/exact_size.txt

Теперь найдем файлы размером ровно 50 байт:

find ~/project/files -type f -size 50c

Результат:

/home/labex/project/files/documents/exact_size.txt

Для проверки размера файла можно использовать команду ls -l:

ls -l ~/project/files/documents/exact_size.txt

Второй столбец в выводе показывает размер файла в байтах, который должен быть равен 50.

Комбинирование нескольких критериев поиска

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

Использование логики AND

По умолчанию, когда вы указываете несколько критериев, find использует логику AND, то есть все условия должны быть истинными. Например, чтобы найти все текстовые файлы размером более 100 байт:

find ~/project/files -type f -name "*.txt" -size +100c

Эта команда находит файлы, которые являются одновременно текстовыми файлами И размером более 100 байт.

Использование логики OR с помощью -o

Для использования логики OR вы можете использовать опцию -o. Например, чтобы найти файлы, которые являются либо текстовыми файлами, либо PDF-файлами:

find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)

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

Результат должен включать:

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf

Использование логики NOT с помощью !

Для отрицания условия используйте оператор !. Например, чтобы найти все файлы, которые не являются текстовыми файлами:

find ~/project/files -type f ! -name "*.txt"

Эта команда находит все файлы, которые НЕ имеют расширение .txt.

Сложные примеры

Попробуем несколько более сложных комбинаций. Например, чтобы найти все файлы, которые:

  • Являются либо JPG, либо PNG-изображениями И
  • Размером более 0 байт
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c

Чтобы найти все файлы в каталоге documents, которые не являются PDF-файлами:

find ~/project/files/documents -type f ! -name "*.pdf"

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

## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
  echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done

touch ~/project/files/images/empty_image.png

Теперь найдем все изображения (JPG или PNG), которые либо пустые, либо размером более 1 КБ:

find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)

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

Резюме

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

  1. Вы изучили базовый синтаксис команды find и способ поиска файлов и каталогов.
  2. Вы узнали, как искать файлы по имени с использованием опции -name и подстановочных знаков.
  3. Вы исследовали, как искать файлы по размеру с использованием опции -size с разными единицами измерения.
  4. Вы комбинировали несколько критериев поиска с помощью логических операторов (AND, OR, NOT) для выполнения сложных поисков.

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

Основные моменты, которые стоит запомнить:

  • Используйте -type f для поиска файлов и -type d для поиска каталогов.
  • Используйте -name для чувствительного к регистру поиска по имени файла и -iname для регистронезависимого поиска.
  • Используйте -size с соответствующими единицами измерения (c, k, M, G) для поиска файлов по размеру.
  • Комбинируйте критерии с помощью логических операторов для создания сложных шаблонов поиска.

Эти навыки помогут вам эффективно перемещаться по файлам и управлять ими в любой среде Linux.