Библиотека сайта rus-linux.net
Шаблоны универсализации в командном процессоре |
||
---|---|---|
Глава 3. Введение в командную строку |
Шаблоны универсализации в командном процессоре
Вы, вероятно, уже использовали символы
универсализации,
не зная, что это такое. Если вы указываете файл в Windows®
или выполняете поиск файла, вы используете *
для установки соответствия случайной строке. Например, *.txt
соответствует всем файлам с именами, заканчивающимися на .txt
.
Мы также часто использовали это в последнем разделе. Но кроме *
существует еще много других универсализаций.
Когда вы вводите
команду типа ls *.txt
и нажимаете на Enter
,
задача по нахождению файлов, соответствующих шаблону *.txt
,
выполняется не командой ls,
а самим shell
'ом.
Требуется некоторое пояснение того, как командная строка
интерпретируется shell
'ом.
Когда вы вводите:
$ ls *.txt readme.txt recipes.txt |
командная строка
разбивается сначала на слова (ls
и *.txt
в этом примере). Когда командный процессор видит в слове *
,
он будет интерпретировать все слово как шаблон универсализации и
будет заменять его именами всех соответствующих файлов. Поэтому
команда, перед тем как командный процессор ее исполнит, принимает вид
ls readme.txt recipe.txt,
что и дает ожидаемый результат. Другие символы также заставляют
командный процессор реагировать подобным образом:
?
: соответствует одному и только одному символу, независимо от того, чем является этот символ;-
[...]
: соответствует любому символу, найденному в скобках. Символы могут быть заданы или в виде диапазона символов (т.е.1-9
), или в виде дискретных значений, или даже в двух видах одновременно. Пример:[a-zBE5-7]
будет соответствовать всем символам междуa
иz
, а также символамB
,E
,5
,6
или7
; [!...]
: соответствует любому символу не найденному в скобках.[!a-z]
, например, будет соответствовать любому символу, не являющемуся буквой в нижнем регистре[5];{c1,c2}
: соответствуетc1
илиc2
, гдеc1
иc2
также являются шаблонами универсализации. Это означает, что вы, например, можете написать{[0-9]*,[acr]}
.
Далее представлено несколько шаблонов и их значения:
/etc/*conf
: все файлы в каталоге/etc
с именами, заканчивающимися наconf
. Этому могут соответствовать файлы/etc/inetd.conf
,/etc/conf.linuxconf
, , а также/etc/conf
, если такой файл существует. Помните, что*
также может соответствовать пустой строке.image/{cars,space[0-9]}/*.jpg
: все файлы с именами, заканчивающимися на.jpg
, в каталогахimage/cars
,image/space0
, (...),image/space9
, если такие каталоги существуют./usr/share/doc/*/README
: все файлы с именамиREADME
во всех подкаталогах, следующих непосредственно после/usr/share/doc
. Одним из совпадений, например, будет/usr/share/doc/mandrake/README
, но не/usr/share/doc/myprog/doc/README
.*[!a-z]
: все файлы в текущем каталоге с именами, которые не оканчиваются буквой в нижнем регистре.
[5]
Будьте осторожны! Хотя это
справедливо для большинства языков, это может быть не так в вашей
собственной настройке языка (локали
).
Это зависит от порядка сортировки.
В некоторых языковых настройках [a-z]
будет соответствовать a, A, b, B, (...), z. Не говоря уже о том, что
в некоторых языках имеются буквы со знаками акцентуации...
Обработка атрибутов файлов |
Перенаправления и каналы |