Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Linux
  3. Глава 2. Учебник по системе Linux

Шаблоны имён файлов

Важное свойство большинства командных оболочек системы Linux — способность обращаться к более, чем одному файлу по имени с использованием специальных символов — шаблонов. С помощью этих шаблонов (wildcards) можно обращаться ко всем файлам, имена которых содержат, скажем, символ n.

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

Приведём простой пример. Допустим, у пользователя Ларри в текущем каталоге имеются файлы frog, joe и stuff.

/home/larry# ls 
frog joe stuff 
/home/larry\# 

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

/home/larry# ls *o* 
frog joe 
/home/larry# 

Можно видеть, что всякий раз, когда в имени встречается символ *, он заменяется всеми возможными вариантами, которые встречаются в именах файлов в текущем каталоге.

Шаблон, состоящий из единственного символа *, подходит ко всем именам файлов, поскольку этому шаблону подходят все последовательности символов. Пример:

/home/larry# ls * 
frog joe stuff 
/home/larry# 

Приведём ещё несколько примеров:

/home/larry# ls f* 
frog 
/home/larry# ls *ff 
stuff 
/home/larry# ls *f* 
frog stuff 
/home/larry# ls s*f 
stuff 
/home/larry\# 

Процесс замены символа * на последовательность имён файлов называется расширением шаблона (wildcard expansion). Расширение шаблона производится командной оболочкой. Очень важно знать, что отдельная команда, такая как ls, никогда не «видит» символ * в списках своих параметров. Именно командная оболочка производит расширение шаблона таким образом, что будут перечислены все удовлетворяющие шаблону имена файлов. Таким образом, команда

/home/larry# ls *o* 

расширяется командной оболочкой в команду

/home/larry# ls frog joe 

Сделаем важное замечание о шаблоне *: он не распознает имена файлов, которые начинаются с одной точки (.). Эти файлы рассматриваются как скрытые (hidden). Скрытость этих файлов заключается в том, что они не включаются в список, выдаваемый обычными командами ls, и не распознаются шаблонами, содержащими символ *.

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

/home/larry# ls 
frog joe stuff 
/home/larry\# 

Однако, если с командой ls использовать опцию -a, то имена файлов, начинающихся с символа ., окажутся в списке. Попробуем эту опцию:

/home/larry\# ls -a 
. .. .bash_profile .bashrc frog 
joe stuff 
/home/larry\# 

Этот список содержит два специальных элемента: . и .., а также два других «скрытых» файла: .bash_profile и .bashrc. Эти два файла являются файлами начальной конфигурации для командной оболочки bash и читаются при входе пользователя larry в систему.

Заметим, что когда мы использовали шаблон *, в списке не появилось ни одного файла, имя которого начиналось с символа ..

/home/larry# ls * frog joe stuff /home/larry# 

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

Ещё одним специальным символом в шаблонах является символ ?. Шаблон ? расширяется до ровно одного символа. Таким образом, команда ls ? выведет список всех файлов, имена которых состоят из одного символа. Команда ls termca? включит в список файл termcap, но не включит файл termcap.backup. Приведём ещё один пример:

/home/larry# ls j?e 
joe 
/home/larry# ls f??g 
frog 
/home/larry\# ls ????f 
stuff 
/home/larry# 

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

/home/larry\# \tinput{cp /etc/s\ttstar /home/larry} 

копирует все файлы в каталоге /etc, имя которых начинается с символа s, в каталог /home/larry. В действительности, формат команды cp является следующим:

cp \cparam{files} \cparam{destination}

где files — список имён файлов, которые надо копировать, а destination — файл или каталог, куда надо копировать. Команда mv имеет аналогичный синтаксис.

При копировании или переносе более чем одного файла аргумент destination должен быть именем каталога. Только ровно один файл может быть скопирован или перенесён в другой файл.

Перекрёстные ссылки книги для Шаблоны имён файлов

  • Типы командных оболочек
  • Вверх
  • Стыкование команд в системе Linux

Book navigation

  • Глава 1. Введение в Linux
  • Глава 2. Учебник по системе Linux
    • Введение
    • Основные понятия системы Linux
    • Первые шаги в системе Linux
    • Обзор основных команд системы UNIX
    • Типы командных оболочек
    • Шаблоны имён файлов
    • Стыкование команд в системе Linux
    • Права доступа к файлам
    • Работа со ссылками на файлы и каталоги
    • Работа с редактором vi
    • Emacs для начинающих
    • Настройка оболочки
    • Самостоятельное изучение

Последние материалы

  • Эмулятор терминала Terminator
    27 minutes 7 seconds ago
  • Приложение scanimage
    5 days 22 hours ago
  • Утилита sensors
    1 week 2 days ago
  • Сканер Rkhunter
    2 weeks 3 days ago
  • Программа resize2fs
    3 weeks 2 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru