[Перевод] Сортировка файлов в командной оболочке Linux

Ищете новый способ организации своих файлов и выполнения над ними каких-либо операций? Тем, кто работает с компьютерами, часто надо что-то отсортировать. Например, список файлов. Сортировка файлов с помощью Bash-команд sort и ls поможет вам навести порядок в своих материалах. Здесь мы поговорим об основах сортировки файлов и их содержимого в Linux.

ywrszgrqqlh61d5meiwciioswdq.jpeg

Предварительные требования


Тут, при разборе примеров, используется Ubuntu 20.04, но вам, для того чтобы попробовать то, о чём мы будем говорить, подойдёт любой дистрибутив Linux.

Алфавитная сортировка файлов


Существует множество способов сортировки файлов в Linux. Предлагаю начать с самого распространённого способа — с сортировки файлов по алфавиту.

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

ls -l


image-loader.svg
Алфавитная сортировка файлов

Команда ls по умолчанию выводит файлы с сортировкой их по алфавиту в восходящем порядке. Для того чтобы обратить порядок сортировки — нужно передать этой команде флаг -r. Например, это может выглядеть как ls -lr. Передача флага -r команде ls возможна и в примерах, рассмотренных ниже.

Сортировка файлов по размеру


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

Для того чтобы отсортировать файлы по размеру — команде ls надо передать флаг -S.

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

ls -lS


Эта команда, как показано ниже, выведет список файлов, отсортированных от больших файлов к меньшим. Для того чтобы обратить порядок сортировки — воспользуйтесь флагом -r. Выглядеть это может как ls -lSr.

image-loader.svg
Сортировка файлов по размеру

Сортировка файлов по времени их модификации


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

Для сортировки файлов по времени модификации команде ls можно передать параметр -t.

ls -lt


image-loader.svg
Сортировка файлов по времени модификации

Сортировка файлов по расширению


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

Тут нам снова пригодится команда ls. На этот раз — с флагом -X.

ls -lX


image-loader.svg
Сортировка файлов по расширению

Обратите внимание на то, что эта команда, выводя группу файлов с одним и тем же расширением, сортирует файлы в пределах этой группы по именам в восходящем порядке.

Сортировка содержимого текстового файла


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

Выполните следующую команду, для того чтобы создать файл с именем fruits.txt, содержащий названия фруктов. Флаг -e позволяет интерпретировать обратную косую черту в конструкции \n, благодаря чему каждое слово будет идти с новой строки.

echo -e "apple \nmango \nwatermelon \ncherry \norange \nbanana" > fruits.txt


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

sort fruits.txt


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

image-loader.svg
Сортировка содержимого файла по алфавиту в восходящем порядке

Команда sort, без флагов, сортирует содержимое файлов в восходящем порядке. Для того чтобы обратить порядок сортировки — воспользуйтесь флагом -r. Соответствующая команда может выглядеть как sort -r fruits.txt. Сортировка данных в обратном порядке с применением -r может быть выполнена и в других рассмотренных тут примерах применения sort.

Сортировка списка чисел в текстовом файле


Для сортировки списков чисел в файлах используется та же команда sort, но — с флагом -n. Чтобы опробовать это на практике — создадим файл scores.txt, в каждой строке которого будет одно число, выбранное мной случайным образом. Вот команда для создания такого файла:

echo -e "45 \n69 \n52 \n21 \n3 \n5 \n78" > scores.txt


Теперь, чтобы отсортировать числа в этом файле, выполним следующую команду.

sort -n scores.txt


image-loader.svg
Сортировка чисел в файле

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

Сортировка списка номеров версий программы в текстовом файле


Возможно, у вас есть файл с номерами версий программы, содержимое которого вы хотите отсортировать. Для того чтобы это сделать — нам понадобится всё та же команда sort, но теперь — с опцией --version-sort.

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

echo -e "1.0.0.1 \n 6.2.1.0 \n4.0.0.2" > versions.txt


Теперь выполним команду такого вида:

sort --version-sort --field-separator=. versions.txt


Здесь имеется новая опция — --field-separator, которая сообщает команде sort о том, что части каждого из номеров разделены точкой. В качестве разделителя полей можно указать любой символ, который разделяет поля номеров версий, хранящиеся в файле.

image-loader.svg
Сортировка номеров версий в файле

Поиск файлов с заданным расширением и их сортировка


В предыдущих примерах мы решали наши задачи с помощью запуска какой-то одной команды (ls или sort). Но при работе в Linux часто возникает необходимость совместного использования двух или большего количества команд. Как это сделать? Сделать это можно с помощью конвейера команд, перенаправляющего выходные данные одной команды на вход другой команды.

Следующая конструкция позволит найти (команда find) все markdown-файлы (-iname «*.md») в рабочей директории (.) и отсортировать их по алфавиту в нисходящем порядке (sort -r). Попробуйте поискать и посортировать другие файлы, меняя расширение «*.md» на какое-то другое.

find . -iname "*.md" | sort -r


image-loader.svg
Поиск и вывод нужных файлов с сортировкой их по алфавиту в нисходящем порядке

Если вам удобнее сохранить то, что получится, в файл, а не выводить в консоль, воспользуйтесь опцией --output команды sort. В результате, например, может получиться такая конструкция: find . -iname «*.md» | sort -r --output=sorted.txt. В данном случае отсортированный список найденных файлов попадёт в файл sorted.txt.

Итоги


Я написал эту статью для того, чтобы показать всем желающим различные возможности по сортировке файлов с помощью Bash-команд в Linux. Теперь вы знаете о том, как сортировать списки файлов и то, что содержится в файлах. Вы теперь умеете создавать конвейеры из команд для выполнения более сложных операций сортировки файлов. И, кстати, обладая этими знаниями, вы вполне можете написать скрипты, которые автоматизируют задачи сортировки файлов и содержимого файлов.НЛО прилетело и оставило здесь промокоды для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

 — 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.

Доступно до 31 декабря 2021 г.

© Habrahabr.ru