Linux: find и grep — поиск файлов и текста

Урок посвящен командам find и grep для поиска файлов и информации внутри них. Для практического примера создадим несколько файлов в директории documents.

Создание тестовых файлов

Создадим файлы с помощью команды touch в директории documents:

cd documents
touch main.7 main_stream text123.txt main2.7p main3.7p name2.cpp

Теперь можно приступать к поиску.

Команда FIND: Поиск файлов

Команда find позволяет искать файлы по различным критериям. Начнем с поиска в текущей директории (.):

find . -type f -name "*.txt"

Эта команда находит все файлы с расширением .txt в текущей директории. -type f указывает на поиск файлов, а -name "*.txt" — на поиск по имени с использованием подстановочного знака *.

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

find . -type f -name "main*" -print

Эта команда найдет все файлы, начинающиеся с «main».

Поиск файлов с учетом регистра:

find . -type f -name "main3.7p"

Найдется только файл main3.7p, так как регистр учитывается. Для игнорирования регистра используем -iname:

find . -type f -iname "main3.7p"

Теперь найдутся файлы с именем main3.7p независимо от регистра.

Поиск файлов по правам доступа:

find . -type f -perm 0664

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

Комбинирование критериев поиска:

find . -type f -perm 0664 -name "m*"

Эта команда ищет файлы с правами доступа 664 и именами, начинающимися с буквы «m».

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

find . -type f -size +1M  # файлы больше 1 МБ
find . -type f -size -1M  # файлы меньше 1 МБ
find . -type f -size 100k # файлы размером 100 КБ

Поиск файлов, не соответствующих критериям (с помощью -not):

find . -type f -not -name "*.txt"

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

Команда GREP: Поиск информации внутри файлов

Команда grep используется для поиска текста внутри файлов. Например, для поиска слова «print» в файле main.7:

grep print main.7

Выведет строку, содержащую «print». Для поиска без учета регистра используется опция -i:

grep -i main main2.7p

Опция -n выводит номера строк:

grep -n main main2.7p

Комбинирование find и grep:

find . -type f -name "*.cpp" -exec grep -i main {} ;

Эта команда ищет файлы с расширением .cpp и выполняет grep для каждого найденного файла.

Более сложный пример с комбинированием find, grep и xargs:

find . -type f -size -100k -print0 | xargs -0 grep -in main

Эта команда находит все файлы размером меньше 100 КБ и выполняет поиск слова «main» (без учета регистра, с номерами строк) во всех этих файлах. -print0 и xargs -0 необходимы для правильной обработки имен файлов, содержащих пробелы.

Команда SORT: Сортировка информации

Команда sort сортирует данные. Для сортировки содержимого файла file.txt:

sort file.txt

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

sort file.txt > file_sorted.txt

Для сортировки чисел:

sort -n test.txt

Опция -n указывает на числовую сортировку. Для обратной сортировки используется опция -r:

sort -nr test.txt

В этом уроке рассмотрены команды find, grep и sort для поиска файлов и информации, а также для сортировки данных в Linux. Комбинируя эти команды, можно эффективно искать и обрабатывать информацию в файловой системе.

Что будем искать? Например,программа