Подстановки имен файлов
Когда вы набираете команду типа ls *.txt
и нажимаете Enter, задача поиска файлов, совпадающих с критерием *.txt
решается не только командой ls
, но и самой оболочкой. Здесь требуется небольшое объяснение о том, как командная строка интерпретируется в shell. При вводе:
$ ls *.txt readme.txt recipes.txt
Командная строка сначала разделяет слова (ls
и *.txt
в этом примере). Когда оболочка видит *
в слове, она будет интерпретировать все слово как шаблон постановки и заменять его именами всех совпадающих файлов. Следовательно, команда, перед тем как оболочка выполняет ее, становится такой
$ ls readme.txt recipes.txt
что дает результат выполнения:
readme.txt recipes.txt
Другие специальные символы:
?
— соответствует одному и только одному символу, независимо от того чем этот символ является;[…]
— соответствует одному символу, найденному в скобках. Символы можно указать как диапазон символов (то есть 1-9
) или дискретные значения, или даже и то и другое. Пример: [a-zBE5-7]
будет соответствовать всем символам между a
и z
, B
, E
, 5
, 6
или 7
;[!…]
— соответствует любому символу, не находящемуся в скобках. Например, [!a-z]
, будет соответствовать любому символу который не является буквой в нижнем регистре;{abc,def}
— соответствует abc
или def
, где abc
и def
также шаблоны подстановки; это означает, что можно написать {[0-9]*,[xyz]}
например.Несколько примеров:
/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]
— все файлы, имена которых не заканчиваются буквой в нижнем регистре в текущем каталоге.