Читать книгу Cуперкомпьютеры: администрирование - Сергей Анатольевич Жуматий - Страница 27
Глава 4. UNIX и Linux – основы
Шаблоны
ОглавлениеСтандартная оболочка (shell) в UNIX – очень мощный инструмент и кроме запуска команд имеет массу возможностей, упрощающих работу в консоли. Самое простое средство – шаблоны имён файлов. Например, написав команду 'ls *.c
', мы получим список всех файлов с расширением '.c' в текущем каталоге.
Важно понимать, что '*.c
' – не один аргумент, вместо него сам shell подставит нужный список. Если в каталоге только два файла – 1.c
и 2.с
, то будет выполнена команда 'ls 1.c 2.c
'. Если ни одного файла с подходящим под шаблон именем нет, то будет подставлен сам шаблон (т. е. будет выполнена команда 'ls *.c
').
Таблица 9: шаблоны в shell
Все шаблоны, кроме '{}
', применяются к реальному списку файлов и выбирают из него только те, которые попадают под шаблон. С помощью скобок '{}
' можно конструировать более сложные шаблоны.
Например, 'ls *.{cxx,h,la}
' превратится в ls *.cxx *.h *.la
. Более интересный приём – 'cp config{,.bak}
', который превратится в cp config config.bak
. Второй файл не существует, он явно задан шаблоном.
Если задан шаблон символами '*
', '?' или '[]
', но под него не попадает ни один файл, то команде будет передан сам шаблон. Например, если каталог пуст, а мы выполняем в нём команду 'ls *.abc
', то выполнится команда 'ls *.abc
', т. е. текст шаблона будет дан команде в качестве аргумента. Будьте осторожны со случайно или намеренно созданными файлами, начинающимися с тире, так как их имена после раскрытия шаблона могут быть восприняты командой как имя управляющего ключа команды!
Чтобы отменить действие спецсимвола, достаточно поставить перед ним обратную косую черту '\' или заключить весь аргумент в одинарные кавычки. Например, если мы хотим удалить файл с именем «--rf *.?
», то можно использовать команду:
rm – –rf\ \*.\?
или
rm – '–rf *.?'
Обратите внимание на первый аргумент '--
' – он нередко используется в командах Linux и обозначает «здесь закончились ключи, далее только имена файлов». В данном случае он не обязателен, но, к примеру, если потребуется удалить файл с именем '-f
', то команда 'rm -f
' не сработает, так как '-f
' – это ключ команды rm
. Сработает команда 'rm – -f
'.