ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
2.7 "Уайлдкард" - "дикая карта"Ключевое свойство большинства оболочек Unix - это способность ссылаться сразу более, чем на один файл, используя для этого специальные символы. Эти, так называемые "дикие карты" (wildcards), позволяют ссылаться, скажем, на все файлы, содержащие символ "n".Уайлдкард ``*'' относится к любому символу или строке символов в имени файла. Например, когда вы используете символ ``*'' в имени файла shell заменяет ее всеми возможными именами файлов из каталога, на который вы ссылаетесь. Вот простенький пример. Предположим, что Larry имеет файлы frog, joe и stuff в своем текущем каталоге: Для обращения сразу ко всем файлам с буквой ``o'' в имени, мы можем использовать команду/home/larry# ls frog joe stuff /home/larry# Как видите, ``*'' уайлдкард была заменена всеми возможными именами файлов из имевшихся в текущем каталоге./home/larry# ls *o* frog joe /home/larry# Использование просто ``*''даст совпадение со всеми именами, поскольку все символы совпадают с уайлдкард. Вот еще несколько примеров./home/larry# ls * frog joe stuff /home/larry# Процесс замены ``*'' на имена файлов называется расширением уайлдкард и выполняется shell. Это важно: конкретные команды, вроде ls, никогда не видят ``*'' в своем списке параметров. Shell, расширяя уайлдкард, включает в список параметров все имена, прошедшие сравнение с шаблоном. Так что команда/home/larry# ls f* frog /home/larry# ls *ff stuff /home/larry# ls *f* frog stuff /home/larry# ls s*f stuff /home/larry# Одно важное замечание относительно ``*'' уайлдкард. Использование этой уайлдкард не даст совпадения с именами файлов, которые начинаются с точки (``.''). Эти файлы воспринимаются как "спрятанные", хотя на самом деле их никуда не прятали. Они не показываются в списке, выдаваемом нормальной командой ls и не выбираются при использовании ``*'' уайлдкард./home/larry# ls *o* расширяется shell до фактической /home/larry# ls frog joe Вот пример. Мы уже упоминали, что каждый каталог имеет два специальных файла: ``.'' - указание на текущий каталог и ``..'' - указание на родительский каталог. Однако, если вы используете команду ls, эти два файла не будут отображены. Если вы используете опцию -a в команде ls, то вы сможете отобразить имена, начинающиеся на ``.'':/home/larry# ls frog joe stuff /home/larry# Как видим, два специальных файла ``.'' и ``..'', также, как два других "спрятанных" файла - .bash_profile и .bashrc. Эти два файла используются при входе larry в систему. Более подробно о них в Разделе 3.13.3./home/larry# ls -a . .. .bash_profile .bashrc frog joe stuff /home/larry# Обратите внимание, что когда мы используем ``*'' уайлдкард, ни один из файлов, с именами, начинающимися на ``.'' не отображается. Это мера предосторожности: если ``*'' уайлдкард выбирала бы имена файлов, начинающиеся на ``.'', она бы также выбрала имена ``.'' и ``..''. Но это может быть опасно при выполнении ряда команд./home/larry# ls * frog joe stuff /home/larry# Другой уайлдкард является ``?''. ``?'' уайлдкард позволяет подставить строго один символ. Так ``ls ?'' выдаст на только имена файлов, состоящие из одного символа, а ``ls termca?'' выдаст ``termcap'', но не выдаст на экран ``termcap.backup''. Вот еще один пример: Как видите, уайлдкард позволяет описывать много файлов за один раз. При обзоре простейших команд в Разделе 3.4 мы говорили, что команды cp и mv могут копировать или перемещать множества файлов за один раз. Например,/home/larry# ls j?e joe /home/larry# ls f??g frog /home/larry# ls ????f stuff /home/larry# скопирует все файлы в /etc , начиная с ``s''в каталог /home/larry. Формат команды cp на самом деле/home/larry# cp /etc/s* /home/larry где <file1> ... <fileN> - список копируемых файлов, а <destination> это файл или каталог, в который производится копирование. mv имеет аналогичный синтаксис.cp <file1> ... <fileN> <destination> Обратите внимание,
что если производится копирование или перемещение более, чем одного файла,
<destination> должен быть каталогом. В файл скопировать или
переместить можно только один файл.
|