Использование Bash Sort для сортировки файлов как профи

Вы ищете способ организовать ваши файлы и выполнить над ними некоторые операции? В программировании часто возникают ситуации, когда необходимо отсортировать данные, например, список файлов. Сортировка файлов с использованием команды Bash sort и ls поможет вам поддерживать порядок вещей.

В этом уроке вы узнаете основы сортировки файлов и содержимого файлов.

Приступим к сортировке!

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

В этом уроке используется Ubuntu 20.04, но любое распределение Linux подойдет.

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

Существует множество способов сортировки файлов в Linux, но давайте перейдем к самому распространенному способу – сортировке файлов в алфавитном порядке.

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

ls -l
Bash Sort to Sort Files Alphabetically

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

Использование сортировки Bash для упорядочивания файлов по размеру

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

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

Выполните следующую команду, чтобы отобразить файлы (ls) отсортированные по размеру в формате длинного списка (-lS).

ls -lS

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

Чтобы изменить порядок сортировки (от меньшего к большему), добавьте флаг -r, например: ls -lSr

Sorting Files by Size

Сортировка файлов по времени изменения через сортировку в Bash

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

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

ls -lt
Sorting Files in a Directory by Modification Time

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

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

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

ls -lX

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

Sorting Files by File Extension

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

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

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

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

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

sort fruits.txt

Ниже вы можете видеть, что содержимое файла отсортировано по возрастанию.

Sorting File’s Content Alphabetically in Ascending Order

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

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

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

Запустите следующую команду, чтобы создать файл с именем ~/data/scores.txt, содержащий случайные числа, каждое на новой строке.

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

Теперь выполните следующую команду, чтобы sort отсортировал числа (-n) в файле ~/data/scores.txt.

sort -n scores.txt

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

Sorting Numbers in a File

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

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

Чтобы продемонстрировать, как работает опция --version-sort, сначала создайте текстовый файл.

Запустите команду ниже, чтобы создать текстовый файл с именем ~/data/versions.txt с произвольными номерами версий, каждый на новой строке (\n).

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

Теперь выполните команду ниже, чтобы sort отсортировать номера версий (--version-sort) в файле versions.txt. Опция --field-separator сообщает команде sort, что числа в каждой версии разделены точкой (.). Вы можете изменить разделитель полей на любой символ, который разделяет числа в списках версий в вашем текстовом файле.

sort --version-sort --field-separator=. versions.txt
Sorting Version Numbers from a Text File

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

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

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

find . -iname "*.md" | sort -r
Finding and Listing Files in Alphabetically Descending Order

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

Заключение

Цель этой статьи заключалась в том, чтобы научить вас различным способам сортировки с использованием команд Bash на машине с Linux. Теперь вы узнали, как сортировать список файлов и содержимое файлов. Кроме того, вы также должны знать, как собирать в цепочку различные команды для более сложной сортировки файлов.

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

Source:
https://adamtheautomator.com/bash-sort/