Spec-Zone.ru › Tcl/Tk

glob

НАЗВАНИЕ
glob — Возвращает имена файлов, соответствующие шаблонам
СИНТАКСИС
ОПИСАНИЕ
ПАРАМЕТРЫ
-directory directory
-join
-nocomplain
-path pathPrefix
-tails
-types typeList
--
ШАБЛОНЫ СОПОСТАВЛЕНИЯ
?
*
[chars]
\x
{a,b,...}
ПРОБЛЕМЫ ПЕРЕНОСИМОСТИ ДЛЯ WINDOWS
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

glob — Возвращает имена файлов, соответствующие шаблонам

Синтаксис

glob ?переключатели? ?шаблон ...?

Описание

Эта команда выполняет «сопоставление имен файлов» аналогично оболочкам csh или bash. Она возвращает список файлов, имена которых соответствуют любому из аргументов шаблон. Никакой определённой последовательности в списке не гарантируется, поэтому, если требуется отсортированный список, вызывающий должен использовать команду lsort.

Параметры

Если начальные аргументы glob начинаются с -, то они рассматриваются как переключатели. В настоящее время поддерживаются следующие переключатели:
-directory directory
Ищет файлы, соответствующие заданным шаблонам, начиная с указанного каталога directory. Это позволяет искать каталоги, имена которых содержат символы, чувствительные к шаблонам, без необходимости явного экранирования таких символов. Этот параметр не может использоваться совместно с параметром -path, который используется для поиска полных путей к файлам, имена которых могут содержать символы, чувствительные к шаблонам.
-join
Остальные аргументы шаблона после обработки параметров рассматриваются как один шаблон, полученный путём объединения аргументов с разделителями каталогов.
-nocomplain
Позволяет возвращать пустой список без ошибки; без этого переключателя возвращается ошибка, если результат списка будет пустым.
-path pathPrefix
Ищет файлы с заданным pathPrefix, где остальная часть имени соответствует заданным шаблонам. Это позволяет искать файлы с именами, похожими на заданный файл (в отличие от каталога), даже когда имена содержат символы, чувствительные к шаблонам. Этот параметр не может использоваться совместно с параметром -directory. Например, чтобы найти все файлы с тем же корневым именем, что и $path, но с разными расширениями, вы должны использовать «glob -path [file rootname $path] .*», что будет работать, даже если $path содержит многочисленные символы, чувствительные к шаблонам.
-tails
Возвращает только часть каждого найденного файла, следующую за последним каталогом, указанным в спецификации -directory или -path. Таким образом, «glob -tails -directory $dir *» эквивалентно «set pwd [pwd]; cd $dir; glob *; cd $pwd». Для спецификаций -path возвращаемые имена будут включать последний сегмент пути, поэтому «glob -tails -path [file rootname ~/foo.tex] .*» вернёт пути, такие как foo.aux foo.bib foo.tex и т. д.
-types typeList
Отображает только файлы или каталоги, которые соответствуют typeList, где элементы списка имеют две формы. Первая форма похожа на параметр -type команды Unix find: b (специальный файл блока), c (специальный файл символа), d (каталог), f (обычный файл), l (символическая ссылка), p (именованная труба) или s (сокет), где несколько типов могут быть указаны в списке. Glob вернёт все файлы, которые соответствуют хотя бы одному из заданных типов. Обратите внимание, что символические ссылки будут возвращены как если задан -types l, так и если целевой объект ссылки соответствует запрошенному типу. Так, ссылка на каталог будет возвращена, если задан -types d.

Вторая форма указывает типы, где все заданные типы должны соответствовать. Это r, w, x как разрешения на файлы и readonly, hidden как особые случаи разрешений. На Macintosh также поддерживаются типы и создатели MacOS, где любой элемент длиной четыре символа считается типом MacOS (например, TEXT). Элементы в форме {macintosh type XXXX} или {macintosh creator XXXX} будут соответствовать типам или создателям соответственно. Нераспознанные типы или указание нескольких типов/создателей MacOS приведут к ошибке.

Эти две формы могут быть смешаны, так -types {d f r w} найдет все обычные файлы или каталоги, у которых есть разрешения на чтение И запись. Следующие являются эквивалентными:

glob -type d *
glob */

за исключением того, что в первом случае не возвращается конечный «/» и он более независим от платформы.

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

Шаблоны сопоставления

Аргументы шаблон могут содержать любые из следующих специальных символов, которые являются надмножеством символов, поддерживаемых командой string match:
?
Соответствует любому одиночному символу.
*
Соответствует любой последовательности из нуля или более символов.
[chars]
Соответствует любому одиночному символу в chars. Если chars содержит последовательность вида a-b, то любой символ между a и b (включительно) будет соответствовать.
\x
Соответствует символу x.
{a,b,...}
Соответствует любому из подшаблонов a, b и т. д.

В Unix, как и в csh, символ «.» в начале имени файла или сразу после «/» должен быть явно указан или с помощью конструкции {}, если не задан флаг -types hidden (так как «.» в начале имени файла указывает, что он скрыт). На других платформах файлы, начинающиеся с «.», обрабатываются не иначе, чем любые другие, за исключением специальных каталогов «.» и «..», которые должны быть указаны явно (чтобы избежать рекурсивного шаблона, например, «glob -join * * * *», от рекурсии вверх по дереву каталогов так же, как и вниз). Кроме того, все символы «/» должны быть явно указаны.

Если первый символ в шаблоне — «~», то он относится к домашнему каталогу пользователя, чьё имя следует за «~». Если за «~» сразу следует «/», то используется значение переменной среды HOME.

Команда glob отличается от csh globbing двумя способами. Во-первых, она не сортирует свой результат (используйте команду lsort, если вам нужен отсортированный список). Во-вторых, glob возвращает только имена файлов, которые реально существуют; в csh проверка на существование не выполняется, если шаблон не содержит ?, *, или [].

Когда команда glob возвращает относительные пути, имена файлов которых начинаются с тильды «~» (например, через glob * или glob -tails, возвращаемый список не будет заключать тильду в «./». Это означает, что необходимо соблюдать осторожность, если эти имена будут позже использоваться с file join, чтобы избежать их интерпретации как абсолютных путей, указывающих на домашний каталог данного пользователя.

Проблемы переносимости для Windows

Для UNC-имен в Windows компоненты servername и sharename пути не могут содержать ?, *, или []. В Windows NT, если шаблон имеет вид «~имя_пользователя@домен», он относится к домашнему каталогу пользователя, чья учётная запись находится на указанном сервере домена NT. В противном случае информация об учётной записи пользователя извлекается из локального компьютера.

Поскольку обратный слэш имеет особое значение для команды glob, шаблоны glob, содержащие разделители путей в стиле Windows, требуют особой осторожности. Шаблон «C:\\foo\\*» интерпретируется как «C:\foo\*», где «\f» будет соответствовать одиночному символу «f», а «\*» будет соответствовать одиночному символу «*» и не будет интерпретироваться как символ подстановочного знака. Одно из решений этой проблемы — использовать разделитель путей в стиле Unix — прямой слэш. Пути в стиле Windows можно преобразовать в пути в стиле Unix с помощью команды «file join $path» или «file normalize $path».

Примеры

Найдите все файлы Tcl в текущем каталоге:
glob *.tcl

Найдите все файлы Tcl в домашнем каталоге пользователя, независимо от текущего каталога:

glob -directory ~ *.tcl

Найдите все подкаталоги текущего каталога:

glob -type d *

Найдите все файлы, имена которых содержат «a», «b» или последовательность «cde»:

glob -type f *{a,b,cde}*

См. также

file

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/glob.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/glob.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API