У программы ls есть флаг который сортирует вывод по размеру файлов
Продолжение перевода первой части руководства. Начало тут.
В данном отрывке рассмотрены команды работы с файловой системой и файлами, такие как ls, mkdir, touch, mv, cp, затронуто использование echo и cat. Рассказано про иноды файловой системы.
Использование команд Linux
Знакомство с ls
А сейчас, мы быстренько пройдемся по команде ls. Скорее всего вы уже хорошо знакомы с этой командой, и знаете, что набрав ls получите список содержимого текущей рабочей директории:
Указав опцию -a, вы можете увидеть полный список, включая скрытые файлы и директории, начинающиеся с ".". Как видно в следующем примере, ls -a выводит также особые связывающие директории "." и "..":
Развернутые списки директорий
Вы также можете задать одну и более директорий или файлов в командной строке с ls. Если вы укажите файл, то ls покажет вам только этот файл. А если зададите директорию, то ls выдаст ее содержимое. Опция -l очень удобна, когда необходимо посмотреть права доступа, владельца, время последнего изменения и размер в списке содержимого директории.
В следующем примере мы использовали опцию -l чтобы отобразить содержимое моей директории /usr:
Первая колонка показывает информацию о правах доступа для каждого элемента. Чуть позже я объясню, как её интерпретировать. Следующая колонка содержит числа ссылок на каждый элемент файловой системы, позже мы вернемся к этому. Третья и четвертая колонки — это список владельцев и групп, соответственно. Пятая колонка — размер объекта. Шестая — время последнего изменения (mtime) объекта. И наконец, последняя колонка с именами объектов. Если файлы являются символическими ссылками, то вы увидите стрелку -> и путь, куда указывает эта символическая ссылка.
Смотрим на директории
Иногда вы захотите взглянуть на директорию, а не внутрь нее. В этом случае вы можете указать опцию -d, которая скажет ls рассматривать любую директорию, как внутреннюю:
Рекурсивный и инодный списки
Так вы можете использовать -d чтобы смотреть на директорию, но также можно использовать -R для противоположного: не только лишь глянуть внутрь директории, но и рекурсивно посмотреть все директории с файлами внутри нее! Мы не включим в руководство никакого примера вывода для этой опции (поскольку обычно он очень объемный), но возможно вы захотите попробовать несколько команд ls -R и ls -Rl, чтобы почувствовать как это работает.
Наконец, опция -i может использоваться для отображения номеров инодов для объектов в списке файловой системы:
Понятие инода
Каждому объекту файловой системы назначен уникальный индекс, называемый номером инода. Это может показаться банальным, но понятие инодов очень важно для понимания большинства операций в файловой системе. Рассмотрим например ссылки "." и "..", которые появляются в каждой директории. Чтобы полностью понять, чем на самом деле является директория "..", мы сперва взглянем на номер инода у /usr/local:
$ ls -id /usr/local
5120 /usr/local
У директории /usr/local номер инода равен 5120. А теперь посмотрим номер инода у /usr/local/bin/..:
$ ls -id /usr/local/bin/..
5120 /usr/local/bin/..
На самом деле, мы даже можем увидеть общее количество ссылок ведущих на этот, 5120 инод, используя команду ls -dl:
Если взглянуть на вторую колонку слева, то видно, что на директорию /usr/local (инод 5120) ссылаются восемь раз. На моей системе на этот инод ведут следующие пути:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
mkdir
Давайте быстренько пройдемся по команде mkdir, которая используется для создания новых директорий. Следующий пример создает три новых директории, tic, tac, и toe, все внутри /tmp:
$ cd /tmp
$ mkdir tic tac toe
По умолчанию, команда mkdir не создает для вас родительские директории; весь путь вплоть до последнего (создаваемого) элемента должен существовать. Так, если вы захотите создать вложенные директории won/der/ful, вам придется выполнить три отдельные команды mkdir:
$ mkdir won/der/ful
mkdir: cannot create directory `won/der/ful': No such file or directory
$ mkdir won
$ mkdir won/der
$ mkdir won/der/ful
Однако, у mkdir есть очень удобная опция -p, которая говорит mkdir создавать любые отсутствующие родительские директории, как можете увидеть тут:
$ mkdir -p easy/as/pie
В целом очень просто. Чтобы узнать больше о команде mkdir наберите man mkdir и прочитайте инструкцию. Это же касается почти всех команд, рассмотренных здесь (например man ls), исключая cd, которая встроена в bash.
touch
Сейчас мы собираемся окинуть взглядом команды cp и mv, используемые для копирования, переименования и перемещения файлов и директорий. Но начнем обзор воспользовавшись командой touch, чтобы создать файл в /tmp:
$ cd /tmp
$ touch copyme
Команда touch обновляет «mtime» (время последней модификации — прим. пер.) файла, если тот существует (вспомните шестую колонку в выводе ls -l). Если файл не существует, то новый, пустой файл будет создан. Сейчас у вас должен быть файл /tmp/copyme с нулевым размером.
Теперь, когда файл существует, давайте добавим немного данных в него. Можно сделать это с помощью команды echo, которая принимает аргументы и печатает их на стандартный вывод. Сперва, команда echo сама по себе:
$ echo "firstfile"
firstfile
А сейчас, та же команда echo, но с перенаправлением вывода:
$ echo "firstfile" > copyme
Знак «больше» сообщает оболочке записывать вывод echo в файл по имени copyme. Этот файл будет создан, если не существовал, или перезаписан, если существует. Набрав ls -l, увидим, что файл copyme имеет размер в 10 байт, так как содержит слово firstfile и символ новой строки:
cat и cp
Чтобы вывести содержимое файла на терминал, используйте команду cat:
$ cat copyme
firstfile
Сейчас, мы можем воспользоваться основным вызовом команды cp для создания файла copiedme из оригинального copyme:
$ cp copyme copiedme
Ниже проверим, что это действительно разные файлы; у них отличаются номера инодов:
А сейчас давайте воспользуемся командой mv для переименования copiedme в movedme. Номер иноды останется прежний; однако, имя файла, указывающее на инод, изменится.
Номер инода у перемещаемого файла остается прежним до тех пор, пока файл назначения находится в той же файловой системе, что и исходный файл. Мы подробнее рассмотрим файловую систему в третьей части нашего руководства.
Пока мы рассказываем об mv, давайте посмотрим, как еще можно использовать эту команду. mv, помимо возможности переименовать файлы, позволяет перемещать один или более файлов в другое место в иерархии директорий. Например, чтобы переместить /var/tmp/myfile.txt в директорию /home/drobbins (которая является моей домашней), я наберу (а мог бы воспользоваться ~ — прим. пер.):
$ mv /var/tmp/myfile.txt /home/drobbins
После этого myfile.txt будет перемещен в /home/drobbins/myfile.txt. И если /home/drobbins располагается в другой файловой системе, нежели /var/tmp, команда mv скопирует myfile.txt в новую файловую систему и удалит его из старой. Как вы уже могли догадаться, когда myfile.txt перемещается между файловыми системами, то myfile.txt на новом месте получает новый номер инода. Это все потому, что у каждой файловой системы свой независимый набор номеров инодов.
Мы также можем воспользоваться mv для перемещения нескольких файлов в одну директорию. К примеру, чтобы переместить myfile1.txt и myarticle3.txt в /home/drobbins, потребуется набрать:
$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
директория — задает директорию, содержимое которой нужно вывести. Если вместо директории указать файл, то будет выведена информация о данном файле.
Если директория не указана, то выводится содержимое текущей директории.
Опции
Если имя файла содержит непечатаемые символы, то выводить их как Esc-последовательность в стиле языка C (например, \n \t )
Задает в каком формате выводить размер файла, например, в килобайтах, мегабайтах или гигабайтах. Вместо SIZE нужно указать обозначение, например:
- K — килобайты.
- M — мегабайты.
- G — гигабайты.
SIZE может принимать значения K, M, G, T, P, E, Z, Y (используется множитель 1024) или KB, MB, GB. (используется множитель 1000).
Не выводить файлы, имя которых оканчивается на знак тильды ~ (такие файлы обычно создаются текстовыми редакторами в качестве резервной копии исходного файла).
Сортировать файлы по времени последнего изменения. Новые файлы располагаются сверху.
При использовании с опциями -lt : выводить время последнего изменения и сортировать по этому времени.
При использовании с опцией -l : выводить время последнего изменения и сортировать по имени.
- auto — автоматически.
- always — всегда.
- never — не раскрашивать.
Добавить специальные символы к именам файлов, которые показывают, что это за файл. Возможные символы:
- / - директория
- * - исполняемый файл.
- @ - символическая ссылка.
- = - сокет.
- > - door.
- | - именованная очередь FIFO (pipe).
Формат вывода. Определяет как выводить список файлов. Вместо длинной записи --format=WORD можно использовать короткие опции, например, -x . Возможные значения WORD (в скобках) и соответсвующие короткие опции:
- -x (across)
- -m (commas) — через запятую.
- -x (horizontal)
- -l (long) — подробная информация о файлах.
- -1 (single-column) — в одну колонку.
- -l (verbose)
- -C (vertical)
При использовании совместно с опцией -l или -ls выводить размер файлов в понятном формате (например, 105K, 12M).
То же, что и опция -h (см. предыдущую опцию), но при расчете размера использовать множитель 1000 вместо 1024.
Выводить информацию о файлах, на которые указывают символические ссыли, вместо информации о самих ссылках.
Скрывать файлы, имена которых соответствуют шаблону. Шаблон может быть вида: *.txt , abcd* , и так далее.*.cpp,*.h>
Добавлять к именам файлов символ, который обозначает тип файла (см. также опцию -F ).
WORD может принимать значения: none (ничего не добавлять), slash ( -p ), file-type ( --file-type ), classify ( -F )
Не выводить файлы, имена которых соответствуют шаблону. Например, скрыть файлы, начинающиеся на букву A: ls -I ’A*’
Для символических ссылок выводить информацию о файле, на который указывает ссылка, но не о самой ссылке.
Заключить имена файлов в кавычки. WORD определяет стиль кавычек. Может принимать значения: literal , locale , shell , shell-always , shell-escape , shell-escape-always , c , escape
- none ( -U )
- size ( -S )
- time ( -t )
- version ( -v )
- extension ( -X )
- atime, access или use ( -u )
- ctime или status ( -c )
Если указана опция --sort=time , то выполняется сортировка по соответствующему времени (новые файлы располагаются сверху).
Определяет формат вывода времени.
При использовании с опцией -l : STYLE может принимать значения full-iso , long-iso , iso , locale , или +FORMAT.
FORMAT задается в формате ’date’.
Если FORMAT задан в виде FORMAT1 FORMAT2 , тогда FORMAT1 применяется к старым файлам, а FORMAT2 к более новым.
При использовании совместно с опциями -lt : сортировать по времени последнего доступа к файлу.
При использовании с опцией -l : сортировать по имени, но выводить время последнего доступа к файлу.
В остальных случаях сортировать по времени последнего доступа к файлу.
Сортировать по номеру версии файлов. Например, если файлы имеют имена myfile-1.txt, myfile-2.txt и так далее. В данном случае в именах файлов автоматически определяется версия и по ней осуществляется сортировка.
Примеры использования команды ls
Рассмотрим несколько примеров использования команды ls.
Подробный список файлов
Выведем содержимое текущей директории, в которой мы в данной момент находимся. Используем опцию -l , чтобы выводить подробную информацию о файлах.
Если необходимо вывести содержимое другой директории, то нужно указать путь до директории, например:
Показать скрытые файлы
По умолчанию команда ls не показывает скрытые файлы. Что их показать, используется опция -a :
Понятный размер файлов
Вывести размер файлов в понятном формате (опция -h ):
Обозначить директории
У команды ls есть очень полезная опция -F , про которую не все знают. Она добавляет к именам файлов дополнительные обозначения, по которым сразу понятно что это за файл. Например, для директорий она добавляет символ /, и в списке файлов сразу видно где директории а где обычные файлы.
Список файлов в одну колонку
Вывести список в одну колонку:
Вывести только файлы с определенным расширением
Выведем файлы только с расширением .txt :
Выведем файлы с определенными расширениями ( .html , .php и .txt ):
Файлы, начинающиеся на определенную букву
Показать только файлы, имена которых начинаются на одну из букв указанного множества (a, d, u и x):
Список файлов с сортировкой по времени
Выведем список файлов с сортировкой по времени последнего изменения файла. Более свежие файлы располагаются сверху.
Сортировка по времени, но в обратном порядке:
Сортировка по размеру
Отсортируем файлы по размеру. Большие файлы располагаются первыми.
Список файлов, включая вложенные директории
Выведем список файлов, включая все файлы внутри вложенных директорий (рекурсивный обход всех директорий):
В настоящее время работать в Linux можно и без использования командной строки. Почти все основные действия можно выполнять используя графические приложения. Но основные команды и утилиты командной строки, я думаю, должен знать каждый, кто работает в Linux.
Многие действия с помощью утилит командной строки можно выполнять значительно быстрее, чем использовать графические аналоги, главное знать требуемые команды. Утилиты командной строки зачастую имеют значительно большие возможности или у них вообще отсутствуют графические аналоги. Наконец, командная строка предоставляет свободу, в ней делаешь то, что ты хочешь и как хочешь, а не ищешь нужную галочку или поле в графической программе.
Запуск эмулятора терминала в Ubuntu
Сделаю небольшое отступление и скажу как запустить эмулятор терминала gnome-terminal в Ubuntu. Для этого нужно выбрать в меню Приложения->Стандартные->Терминал . Тем самым, вы запустите эмулятор терминала для рабочего стола Gnome ( gnome-terminal ), попросту говоря, «командную строку», если вам так угодно :-) В нем вы можете вводить команды Linux, о которых и пойдет речь ниже.
Приглашение к вводу команды
Приглашение к вводу команды в эмуляторе терминала имеет следующий формат:
Здесь — это имя, которое вы использовали для входа в систему и под которым вы сейчас работаете. Затем идет значок @, за ним имя локальной системы, далее двоеточие и имя текущего каталога, в котором вы в данный момент находитесь.
В эмуляторе gnome-terminal при запуске терминала в качестве каталога используется значок тильда ~ . В Linux символ ~ используется для сокращенного обозначения домашней директории пользователя, а именно директории /home/ .
В конце приглашения выводится знак доллара $ .
Основные команды Linux
Ниже я вкратце рассмотрю некоторые основные команды (утилиты) Linux и их опции, которые часто приходится использовать при работе в командной строке. Некоторые команды я приведу с примерами, а некоторые просто с кратким описанием.
ls — вывод имен файлов
Утилита ls предназначена, для вывода списка файлов и каталогов в текущем каталоге. Рассмотрим некоторые полезные свойства команды ls .
-A — включить в список «скрытые» файлы («скрытые» файлы в Linux имеют в своем названии точку в начале имени файла, например, .gtkrc-2.0). -S — отсортировать файлы по размеру. -t — отсортировать по дате изменения. -1 — выводить имена в столбик, по одному на каждой строке. -l — вывести подробную информацию о каждом файле, размер файла, владелец файла, права доступа, дата изменения.
Теперь приведу несколько примеров. Выполнив команду ls без параметров, вы получите просто список файлов в каталоге.
Теперь выполним команду с опциями -A , -S , -1 . В результате получим список всех файлов, включая «скрытые», расположенных по одному на каждой строке и отсортированных по размеру.
Выполним команду ls с опцией -l . Получим подробную информацию о каждом файле.
mkdir — создание каталога
Команда mkdir предназначена для создания новой директории. Чтобы создать новую директорию, выполните mkdir . Для того, чтобы создать сразу несколько директорий, укажите их имена через пробел, например:
cp — копирование файла
Утилита cp используется для создания копии файла. Для обычного копирования используется следующий синтаксис cp .
При использовании cp есть один нюанс, который нужно обязательно помнить. Если файл назначения уже существует, то cp перезапишет его. Поэтому, чтобы избежать случайного уничтожения существующего файла, нужно использовать команду cp с опцией -i . Перед перезаписью файла будет выдан запрос на ваше согласие. Например, если мы копируем файл linux.jpg в файл windows.jpg и windows.jpg уже существует, то будет выдан запрос на перезапись файла:
Опция -r (или -R ) используется для копирования одной директории в другую.
mv — перемещение, переименование файла
Утилита mv предназначена для перемещения, переименования файла. Для переименования файла используется синтаксис mv . Для перемещения файла в другую директорию используется синтаксис mv . С mv можно также использовать опцию -i , чтобы случайно не перезаписать существующий файл.
rm — удаление файла
Команда rm предназначена для удаления файлов. Основные опции команды:
-i — выводить запрос перед удалением каждого файла. -r (или -R) — удалить директории и их содержимое.
cd — смена текущего каталога
Команда cd предназначена для смены каталога, в котором вы сейчас находитесь. Например, вы сейчас находитесь в своем домашнем каталоге ~ и хотите перейти в каталог ~/information , тогда нужно просто выполнить команду cd information .
Если выполнить команду cd без параметров, то вы перейдете в свой домашний каталог ~ .
Чтобы перейти в каталог на уровень выше (в родительский каталог) можно использовать синоним «две точки» — .. , которые в Linux служат синонимом пути родительского каталога. Например, находясь в каталоге ~/information мы можем перейти в каталог ~ следующим образом:
cat — вывод содержимого файла
Утилита cat выводит содержимое текстового файла. Простейший синтаксис команды cat . Утилита cat может использоваться для соединения конкатенации двух текстовых файлов, собственно от этого и происходит название утилиты (catenation, concatenation). Например, у нас есть два файла download и ubuntu и в каждом по две строки. Сначала мы выведем содержимое файлов по отдельности, а затем сделаем конкатенацию двух файлов.
pwd — вывод полного пути текущего каталога
Команда pwd используется, чтобы вывести полный путь текущего каталога.
man — получение руководства
Системная утилита man выводит страницы системной документации. С ее помощью можно получить информацию по любым командам Linux. Для этого используется синтаксис man . Например, чтобы вывести руководство по утилите ls , используйте команду man ls .
то есть по не убыванию отсортировал - не нравится, по не возрастанию, и со скрытыми, и без скрытых - ничего не нравится. не подскажете, как быть?
Добрый день, Никита! Один из вариантов, которые вы привели, верный и проходит тестирование. Обратите внимание, что если нужно выполнить последовательно несколько команд, записанных в одну строку, то команды нужно разделить точкой с запятой:
не думаю, что я правильно понял разделение команд через ;
команда же в командной строке? да. но до сих пор я не видел в уроках, чтобы в командной строке что-то делали через ;
если купить подписку, эти вопросы могут решаться быстрее? всякое желание отпадает что-то делать, когда ты вроде как все делаешь правильно, но тебе говорят, что все-такие ты не делаешь правильно..а ты делаешь..а тебе говорят. понимаете?
платформа и правда чудесная, но вот это.
Добрый день, Никита! Обратите внимание, что в файл solution нужно записать саму команду, а не её вывод.
Запишите эту команду в файл solution. Нужно записать именно команду, а не её вывод!
Сейчас в ревью я вижу, что в solution записан вывод команды.
Одна из команд, которую вы привели, верная:
Запишите её в файл solution и тесты будут пройдены.
Что касается последовательного выполнения команд, то если вам нужно последовательно друг за другом выполнить несколько команд, то их нужно разделить запятой. Например, как здесь:
Сначала выполнится команда cd /var и будет выполнен переход в директорию /var, затем распечатается содержимое текущей директории ls -l -S.
Капец, я раз 10 перечитал задание :( извините за невнимательность!
в терминале проходит cd=/var ls -lS , но под решение не подходит
Максим Литвинов, спасибо за подсказку!)) Но из задания, честно говоря, не понятно, что команда должна заканчивать на /var. Я зашла в эту дирректорию и выполнила команду, 5 команд . и думаю: почему тесты не проходят?
Владислав кучеров, По логике должна проходить это команда cd /var ls -ls, а та которая верная, в чем разница и где логика?
Да я вот тоже всю голову себе сломал. вроде написано по шагово но все равно как то криво. нашел я команду, в терминале попробовал команду cd /var нажал на ls и ввел флаг который сортирует по размеру. На этом этапе вроде все верно. перехожу на solution и пробую ввести все тоже самое. Но нифига. Пока не почитал обсуждения. Вопрос! почему в уроке не сказанно про ";"? Ведь если не подсказки в обсуждении догадаться о такой схеме не возможно
Ищете новый способ организации своих файлов и выполнения над ними каких-либо операций? Тем, кто работает с компьютерами, часто надо что-то отсортировать. Например, список файлов. Сортировка файлов с помощью Bash-команд sort и ls поможет вам навести порядок в своих материалах. Здесь мы поговорим об основах сортировки файлов и их содержимого в Linux.
Предварительные требования
Тут, при разборе примеров, используется Ubuntu 20.04, но вам, для того чтобы попробовать то, о чём мы будем говорить, подойдёт любой дистрибутив Linux.
Алфавитная сортировка файлов
Существует множество способов сортировки файлов в Linux. Предлагаю начать с самого распространённого способа — с сортировки файлов по алфавиту.
Запустите терминал и выполните команду ls -l , показанную ниже, чтобы получить список файлов, находящихся в директории, отсортированных по имени в восходящем порядке. Флаг -l сообщает команде ls о том, что ей нужно вывести данные в виде списка, содержащего подробные сведения о файлах.
Алфавитная сортировка файлов
Команда ls по умолчанию выводит файлы с сортировкой их по алфавиту в восходящем порядке. Для того чтобы обратить порядок сортировки — нужно передать этой команде флаг -r . Например, это может выглядеть как ls -lr . Передача флага -r команде ls возможна и в примерах, рассмотренных ниже.
Сортировка файлов по размеру
Вместо того чтобы сортировать файлы по алфавиту, вам может понадобиться отсортировать их по размеру. Это может быть нужно, например, когда надо найти самые большие или самые маленькие файлы.
Для того чтобы отсортировать файлы по размеру — команде ls надо передать флаг -S .
Вот команда, которая позволяет отсортировать файлы по размеру и вывести список файлов с их подробным описанием.
Эта команда, как показано ниже, выведет список файлов, отсортированных от больших файлов к меньшим. Для того чтобы обратить порядок сортировки — воспользуйтесь флагом -r . Выглядеть это может как ls -lSr .
Сортировка файлов по размеру
Сортировка файлов по времени их модификации
Возможно, вам понадобится отсортировать файлы по времени их модификации. Например, вы забыли имя созданного файла, но помните время, когда его создавали.
Для сортировки файлов по времени модификации команде ls можно передать параметр -t .
Сортировка файлов по времени модификации
Сортировка файлов по расширению
Если вам нужен файл определённого типа, в деле по его поиску вам может очень хорошо помочь сортировка файлов по расширению.
Тут нам снова пригодится команда ls . На этот раз — с флагом -X .
Сортировка файлов по расширению
Обратите внимание на то, что эта команда, выводя группу файлов с одним и тем же расширением, сортирует файлы в пределах этой группы по именам в восходящем порядке.
Сортировка содержимого текстового файла
Теперь вы уже знаете немало способов сортировки файлов. Поэтому давайте переключим внимание с команды ls на команду sort . Эта команда позволяет сортировать содержимое файлов, руководствуясь переданными ей флагами. Правда, прежде чем опробовать эту команду, нам понадобится файл, содержимое которого мы будем сортировать.
Выполните следующую команду, для того чтобы создать файл с именем fruits.txt , содержащий названия фруктов. Флаг -e позволяет интерпретировать обратную косую черту в конструкции \n , благодаря чему каждое слово будет идти с новой строки.
Теперь выполните следующую команду, для того чтобы отсортировать слова в этом файле.
Ниже показано содержимое файла, отсортированное по алфавиту в восходящем порядке.
Сортировка содержимого файла по алфавиту в восходящем порядке
Команда sort , без флагов, сортирует содержимое файлов в восходящем порядке. Для того чтобы обратить порядок сортировки — воспользуйтесь флагом -r . Соответствующая команда может выглядеть как sort -r fruits.txt . Сортировка данных в обратном порядке с применением -r может быть выполнена и в других рассмотренных тут примерах применения sort .
Сортировка списка чисел в текстовом файле
Для сортировки списков чисел в файлах используется та же команда sort , но — с флагом -n . Чтобы опробовать это на практике — создадим файл scores.txt , в каждой строке которого будет одно число, выбранное мной случайным образом. Вот команда для создания такого файла:
Теперь, чтобы отсортировать числа в этом файле, выполним следующую команду.
Сортировка чисел в файле
Видно, что числа, находящиеся в файле, отсортированы от самого маленького к самому большому.
Сортировка списка номеров версий программы в текстовом файле
Возможно, у вас есть файл с номерами версий программы, содержимое которого вы хотите отсортировать. Для того чтобы это сделать — нам понадобится всё та же команда sort , но теперь — с опцией --version-sort .
Создадим, как обычно, файл, на котором будем экспериментировать. Это будет versions.txt , в каждой строке которого имеется номер версии.
Теперь выполним команду такого вида:
Здесь имеется новая опция — --field-separator , которая сообщает команде sort о том, что части каждого из номеров разделены точкой. В качестве разделителя полей можно указать любой символ, который разделяет поля номеров версий, хранящиеся в файле.
Сортировка номеров версий в файле
Поиск файлов с заданным расширением и их сортировка
В предыдущих примерах мы решали наши задачи с помощью запуска какой-то одной команды ( ls или sort ). Но при работе в Linux часто возникает необходимость совместного использования двух или большего количества команд. Как это сделать? Сделать это можно с помощью конвейера команд, перенаправляющего выходные данные одной команды на вход другой команды.
Следующая конструкция позволит найти (команда find ) все markdown-файлы ( -iname «*.md» ) в рабочей директории ( . ) и отсортировать их по алфавиту в нисходящем порядке ( sort -r ). Попробуйте поискать и посортировать другие файлы, меняя расширение «*.md» на какое-то другое.
Поиск и вывод нужных файлов с сортировкой их по алфавиту в нисходящем порядке
Если вам удобнее сохранить то, что получится, в файл, а не выводить в консоль, воспользуйтесь опцией --output команды sort . В результате, например, может получиться такая конструкция: find . -iname «*.md» | sort -r --output=sorted.txt . В данном случае отсортированный список найденных файлов попадёт в файл sorted.txt .
Итоги
Я написал эту статью для того, чтобы показать всем желающим различные возможности по сортировке файлов с помощью Bash-команд в Linux. Теперь вы знаете о том, как сортировать списки файлов и то, что содержится в файлах. Вы теперь умеете создавать конвейеры из команд для выполнения более сложных операций сортировки файлов. И, кстати, обладая этими знаниями, вы вполне можете написать скрипты, которые автоматизируют задачи сортировки файлов и содержимого файлов.
Читайте также: