Подстановки имен файлов
Когда вы набираете команду типа 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]— все файлы, имена которых не заканчиваются буквой в нижнем регистре в текущем каталоге.