Вывести список каталогов имена которых состоят из русских букв linux

Обновлено: 03.07.2024

.Основным средством представления данных а также взаимодействия пользователя с системой в Linux является текст или текстовые данные. Как известно, управление операционной системой (ОС) Linux осуществляется, преимущественно, через терминал консоли командной оболочки, локальный или удалённый. Даже в самых современных дистрибутивах Linux, имеющими на борту удобные графические оболочки, всё же без использования командной оболочки не обойтись. Так уж сложилось исторически, поскольку создатели системы UNIX, чьим потомком является Linux, ещё на начальных этапах разработки системы старались всячески облегчить работу в командной оболочке и повысить «производительность труда» при работе с ней — ведь это напрямую связано с обработкой текстовых данных, начиная с ввода команд и редактирования файлов и заканчивая управлением потоками ввода/вывода.

В результате система совершенствовалась и дополнялась специализированными утилитами, которые способны ускорить, причём очень существенно, скорость и эффективность работы с текстовыми данными. Одной из таких утилит является awk — в общем случае текстовый фильтр для сортировки, выборки и даже программирования управления текстовыми данными. Благодаря таким инструментам и некоторым хитростям использования командной оболочки опытный пользователь способен без использования графических пользовательских интерфейсов (GUI) управлять системой и данными заметно быстрее и эффективнее нежели при задействовании всевозможных графических приложений.

Как работает awk?

На самом деле awk – это изначально язык программирования, предназначенный для обработки текста/данных. Поскольку, как уже отмечалось, в Linux-системах основной средой для взаимодействия между пользователем и машиной является текст, то обработка достаточно больших его объёмов вручную способна была парализовать на некоторое время процесс выполнения основной работы. Требовался инструмент для обеспечения автоматической обработки данных и позволяющий использовать эту возможность «на лету», т. е. прямо при работе в командной оболочке. Лучшим средством для достижения этой цели является использование специализированного языка программирования и регулярных выражений, которое реализовано в виде одноимённой утилиты — команды awk.

Справедливо заметить, что awk – это прежде всего Си-подобный язык программирования, но для удобства понимания, под awk принято понимать утилиту или команду. Разработчиками языка AWK являются Alfred V. Aho, Peter J. Weinberger и Brian W. Kernighan, по сокращённым инициалам которых язык и получил своё название. Создан язык в 1977 году. Кстати, на основе AWK когда-то был создан язык Perl, который и по сей день является одним из самых мощных языков для высокопроизводительной обработки данных.

В качестве исходных данных awk принимает на вход строку и после её обработки в зависимости от конкретных опций выдаёт результат. Исходные данные могут поступать из файла или из вывода другой команды/программы. Самым распространённым случаем использования awk является выборка определённых столбцов из результата вывода других команд, например:

В результате вывод будет примерно таким:


Следует напомнить, что по-умолчанию вывод команды ll выглядит следующим образом:


Как видно, команда awk помогла вывести только отдельный столбец из общего вывода ll – с именами каталогов и файлов.

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

Синтаксис

Несколько действий разделяются (в соответствии с семантикой языка AWK) символом точки с запятой.

Следующая команда выведет весь файл file.txt подобно команде cat


Если нам нужно получить только первый столбец


Следующие примеры демонстрируют использование awk в самых распространённых ситуациях:

В результате будет выведен список с именами установленных пакетов. Если же нужно узнать, к примеру, какие пакеты PHP или Apache установлены в системе. Следует дать команду:

Примеры использования awk

Для лучшего понимания стоит рассмотреть некоторые примеры использования утилиты awk. Для вывода/печати конкретных (например, второго и четвёртого) столбцов:

Вывести все столбцы:

Напечатать количество строк в файле:

где NR – Number of Rows, т. е. количество строк. Для задания регулярных выражений:

Здесь отбору подлежат все пункты в первом столбце, имена которых начинаются на «P».

Здесь обратное условие, определяемое символом «!», т. е. выбраны будут все пункты из первого столбца и имена которых не начинаются на «P».

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


Если бы мы запустили утилиту без указания разделителя, то вывод был бы таким


Конечно же, в приведённых примерах демонстрируются далеко не все возможности awk. Однако для эффективной работы в командной оболочке Linux, да и вообще с системой вышеприведённых примеров вполне достаточно. Поскольку они показывают общие принципы построения команд и действий для awk. Что позволяет создавать конкретные и более сложные конструкции в зависимости от конкретной задачи. Для более глубокого и масштабного использования утилиты awk. Рекомендуется посвятить некоторое время на изучения самого языка AWK.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Основное применение команды поиска. Ищем файл (учитывается регистр букв) по имени в текущей директории (каталоге) и во всех поддиректориях.

Найти в домашнем каталоге все файлы PowerPoint (.ppt). Обратите внимание, что мы поместили шаблон имени файла в кавычки, чтобы оболочка не развернула его. Мы хотим передать команде именно аргумент *.ppt , а о соответствии шаблону пусть заботится f ind .

Найдём все файлы в системе, начинающиеся на top

Найдём список файлов системы, имена которых начинаются с букв top, за которыми следуют еще три символа:

Чтобы получить список файлов системы, имена которых начинаются с букв top, за которыми следуют пять и более символов, введите:

Чтобы увидеть все файлы в каталоге /usr/share, содержащие в имени слово farm, введите:

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

Более гибкий, но сложный способ. После –qi можно использовать регулярные выражения.

Используйте -regex вместо -name для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк. Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку net или comm, наберите:

Примечание: Опция -regex совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.

Список всех файлов текущего каталога, имена которых содержат строку invoice:

Список всех файлов со строкой invoice в имени, которые содержатся в текущем каталоге и во всех его подкаталогах:

Расширяем диапазон поиска до желаемого уровня:

Утилита slocate найдет все файлы, имена которых содержат строку invoice. Так как slocate использует индексированный список имен файлов, то работает она с молниеносной быстротой. Этот индекс формируется программой updatedb (то же самое делает команда slocate с ключом -u), обычно запускаемой раз в день с помощью cron или anacron. В дистрибутиве Ubuntu 7.04 база данных slocateнаходится в файле /var/lib/slocate/slocate.db. Это единственный недостаток slocate — команда не найдет файлы, которые были созданы после последнего запуска updatedb.

Примечание: s в названии команды slocate восходит к слову «безопасный» ('secure'). И вот в чем здесь дело: программа updatedb (которая строит индекс) работает с привилегиями администратора, чтобы иметь доступ ко всем файлам. Поэтому в индексе slocate.db могут быть файлы, невидимые обычным пользователям (например, системные файлы или личные файлы других пользователей). Индекс slocateвключает информацию о владельце файла и правах доступа, и программа slocate не покажет те файлы, соваться в которые вам не полагается. Раньше была еще программа locate, не отличавшаяся такой щепетильностью, но в современных дистрибутивах Linux slocate и locate указывают на одну и ту же утилиту.

Поиск файла по имени без учета регистра букв

Находит все имена с MyCProgram.c без учёта регистра (прописных и строчных букв) в текущей директории и во всех поддиректориях.

Найти подкаталоги определённого владельца

В разделе «что искать» может быть несколько условий, и по умолчанию они объединяются через «логическое И», то есть при поиске отбираются файлы, для которых выполняются все условия. К примеру, поищем подкаталоги в /var, владельцем которых является daemon:

Опция -group подобным образом определяет файлы, принадлежащие некоторой группе пользователей. Чтобы вывести список файлов в каталоге /dev, принадлежащих группе audio, введите:

Ещё вариант поиска по нескольким критериям

Вы можете определить несколько опций f ind одновременно, чтобы найти файлы, удовлетворяющие сразу нескольким критериям.
Чтобы вывести список файлов в домашнем каталоге, имена которых начинаются со строки `top', и которые новее файла /etc/motd, введите:

Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения .gz ), введите:

Вариативный поиск: соответствие одному из условий

Объединим условия по «ИЛИ» вместо объединения по «И». В каталоге /etc мы ищем либо файлы, владельцем которых является cupsys, либо пустые файлы:

Команда printf в awk позволяет выводить форматированные данные. Она даёт возможность настраивать внешний вид выводимых данных благодаря использованию шаблонов, в которых могут содержаться текстовые данные и спецификаторы форматирования.

Спецификатор форматирования — это специальный символ, который задаёт тип выводимых данных и то, как именно их нужно выводить. Awk использует спецификаторы форматирования как указатели мест вставки данных из переменных, передаваемых printf.

Первый спецификатор соответствует первой переменной, второй спецификатор — второй, и так далее.

Спецификаторы форматирования записывают в таком виде:

Вот некоторые из них:

c — воспринимает переданное ему число как код ASCII-символа и выводит этот символ;

d — выводит десятичное целое число;

i — то же самое, что и d;

e — выводит число в экспоненциальной форме;

f — выводит число с плавающей запятой;

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

o — выводит восьмеричное представление числа;

s — выводит текстовую строку;

Вот как форматировать выводимые данные с помощью printf:

printf "The result is: %e\n", x


Форматирование выходных данных с помощью printf

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

Задания лабораторной работы

Используя awk:

вывести на экран из файла calendar.txt день недели и текущее число в виде «сегодня вторник … августа»;

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

определить количество(сумму) байтов, занятых всеми вашими текстовыми файлами (txt) в каталогах и подкаталогах;

определить количество блоков, содержащих ваш текущий каталог;

изменить права доступа для некоторых файлов текущего каталога и провести сортировку списка по возможностям доступа;

напечатать список каталогов, в которых обнаружены файлы с именами data*.txt;

подсчитать, сколько раз пользователь входил в систему;

напечатать список пользователей, отсортированный по времени.

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

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

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Favorite

Добавить в избранное

Главное меню » Linux » Как вывести список только каталогов в Linux

(1 оценок, среднее: 5,00 из 5)

3 способа записи списка в файл на Python

К оманда ls в Linux используется для вывода содержимого любого каталога.

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

Но что, если вы хотите перечислить только каталоги?

Как и все в Linux, есть несколько способов выполнить одну и ту же задачу. Список только каталогов ничем не отличается:

Используйте команду ls для вывода только списка каталогов

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

Чтобы вывести список только подкаталогов , используйте параметр -d с командой ls следующим образом:

Вот результат, который он показывает:

Почему */? Потому что без него ls -d будет возвращено только имя каталога. В списке опции -d каталоги не его содержимое (который включает в себя файл, каталоги и т.д.).

Вы можете комбинировать его с опцией длинного листинга -l и большинством других опций:

Если вам не нужна завершающая косая черта (/) в конце имен каталогов, вы можете использовать команду cut, чтобы вырезать ее:

Список только подкаталогов в определенном каталоге

Вышеупомянутая команда работает в текущем каталоге. Что делать, если вы не в том же каталоге?

В этой ситуации вы можете использовать */в конце пути к каталогу ls -d:

Вот пример, когда мы выходим из каталога Documents и затем перечисляю только каталоги внутри каталога Documents:

Вы заметили, что в нем нет скрытого каталога? Это один из недостатков этого метода. Вы можете использовать ls -d .*/ для отображения скрытых каталогов, но он отображает только скрытые каталоги.

Используйте комбинацию команды ls и grep

Вы всегда можете положиться на старую-добрую команду grep для фильтрации вывода для определенного контента.

Если вы долго перечисляете содержимое, вы можете идентифицировать каталоги, потому что начните с d.

Вы можете использовать grep для фильтрации содержимого, которое начинается с d:

Но это дает вам гораздо больше полей, чем просто имена каталогов:

Используйте команду поиска, чтобы вывести список только каталогов

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

Надеюсь, вы знакомы с командой find. Тем не менее мы объясним.

С помощью type d вы просите команду find искать только каталоги.

С помощью maxdepth 1 вы просите команду find сохранить поиск только на текущем уровне (и не заходить в подкаталоги).

Как вы можете видеть в выводе выше, он также показывает скрытый каталог.

Используйте команду tree для вывода списка только каталогов

По умолчанию команда tree дает вам полную структуру каталогов. Вы можете изменить его, чтобы отображались только каталоги и только на текущем уровне.

Использование команды echo для вывода списка каталогов

Маловероятный кандидат? Вы будете удивлены, узнав, что команда echo в Linux также может использоваться для отображения содержимого каталога. Попробуйте использовать echo * и убедитесь сами.

Подобно команде ls, вы также можете использовать шаблон */ для вывода списка только каталогов в текущем рабочем каталоге.

Вот результат, идентичный тому, что вы получили с помощью команды ls -d.

Могло быть больше способов перечислить только каталоги, а не файлы. Фактически, обсуждаемые здесь методы могут иметь некоторые «если» и «но» в зависимости от того, что вы ищете.

Надеюсь, этот совет по Linux окажется для вас полезным. Вопросы и предложения всегда приветствуются.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: