Скорочення в іменах файлів UNIX

Почнемо з шаблону імені файлу Припустимо, потрібно ввести великий документ, наприклад книгу Логічно книга розділена на невеликі фрагменти: глави і, може бути, розділи Фізично її також треба розділити, адже великі файли незручно редагувати

Тому документ має бути записаний по частинах в кілька фай лов Можна створити окремий файл для кожної глави і назвати їх ch1, ch2 і т д Якщо ж кожна глава розбита на розділи, то можна створити файли:

ch11 ch12 ch13

… ch21 ch22

Саме таку структуру має ця книга Якщо називати файли систематично, керуючись угодою про імена файлів, то мож без праці визначити місце кожного окремого файлу в цілому

Які дії треба зробити, щоб надрукувати книгу цілком

Можна сказати:

$ pr  ch11  ch12  ch13  ..

але вводити імя за імям скоро набридне, до того ж, в довгому списку легко наробити помилок На допомогу приходить маска імені файлу Вводимо:

$ pr  ch*

Для оболонки символ * означає будь-який рядок символів, так що ch * – це шаблон, якому відповідають імена всіх файлів в поточному каталозі, що починаються з ch Оболонка створює список таких файлів в алфавітному порядке1 і передає цей список програмі pr Програма pr не бачить жодних *, їй передається список рядків, які оболонка знайшла в поточному каталозі за збігом з шаблоном

Вирішальним є те, що маска файлу – це не властивість команди pr, а сервіс оболонки Тобто її можна використовувати для утворення послідовності імен файлів в будь-якій команді Наприклад, щоб порахувати кількість слів у першому розділі:

$ wc ch1*

113

562

3200 ch10

935

4081

22435 ch11

974

4191

22756 ch12

378

1561

8481 ch13

1293

5298

28841 ch14

33

194

1190 ch15

1 Ще раз звернемо вашу увагу на те, що порядок сортування не строго алфавітний, літери у верхньому регістрі передують буквах у нижньому Див ascii (7) щодо впорядкування сортируемих символів

75        323      2030  ch16

3801    16210    88933  total

$

Є така команда echo, яка надзвичайно корисна для перевірки значень символів маски Легко здогадатися, що робить ця команда – вона «відображає» (виводить) свої аргументи:

$ echo hello  world

hello  world

$

Але ж аргументи можуть бути задані шаблоном:

$ echo ch1*

виводить імена всіх файлів глави 1,

$ echo *

виводить імена всіхфайлів поточного каталогу в алфавітному порядку,

$ pr  *

роздруковує всі файли (в алфавітному порядку) і, нарешті,

$ rm *

видаляє всі файли в поточному каталозі (Треба було переконатися, що це

дійсно те, що ви хотіли)

Символ * не обовязково повинен займати останню позицію в імені файлу, таких символів може бути декілька і вони можуть стояти в будь-якому місці Так,

$ rm *save

видаляє всі файли, імена яких закінчуються на save

Врахуйте, що імена файлів відсортовані в алфавітному, а не в числовому порядку Тому якщо в книзі 10 глав, то порядок виведення може виявитися не таким, як ви очікували, – ch10 передує ch2:

$ echo *

ch11  ch12  .. ch101  ch102  .. ch21 ch22  ..

$

Хоча шаблон, утворений за допомогою *, і застосовується найчастіше, майте на увазі, що оболонка може обробляти і інші шаблони Шаблоном [..] задовольняє будь-який з символів, що знаходиться в дужках Ряд послідовних букв або цифр може бути записаний у короткій формі:

$ pr ch [12346789] * Друкувати глави 1,2,3,4,6,7,8,9, але не 5

$ pr ch [1-46-9] * Те ж, що і в першому випадку

$ rm temp [az] Видалити будь-які існуючі tempa, .., tempz

Шаблоном відповідає будь-який окремий символ:

$ ls Перераховує файли з іменами з одного символу

$ ls-l ch 1 Виводить ch11  ch21  ch31 і т д, але не ch101

$ rm temp Видаляє файли temp1, .., tempa і т д

Зверніть увагу, що шаблони відносяться тільки до існуючим іменах файлів Зокрема, не можна за допомогою шаблонів створювати нові імена Наприклад, якщо треба в назві кожного файлу заме нитка скорочення сh на слово chapter, то не можна зробити це командою:

$ mv ch * chapter * Не працює

тому що не існує файлового імені, відповідного шаблоном chapter *

Шаблонні символи, такі як *, можуть застосовуватися як в простих іменах файлів, так і в подорожніх в цьому випадку відповідність визна ляется для кожного компонента шляху, що містить спеціальний символ Тобто / usr / mary / * збігається з усім вмістом / usr / mary, а

/ Usr / * / calendar генерує список колійних імен файлів calendar всіх користувачів

Якщо символи *, і т д цікавлять вас самі по собі, у відриві від свого спеціального значення, укладіть весь аргумент в одинарні лапки, як у наступному прикладі

$ ls ?’

Також можна передувати спеціальний символ зворотною косою межею:

$ ls \

(Оскільки – Це не символ анулювання рядка і не знак виключення, то така зворотна коса риса інтерпретується НЕ ядром, а оболонкою) Застосування лапок детально обговорюється в розділі 3

Вправа 14 У чому полягають відмінності між цими командами

$ ls junk           $ echo junk

$ ls /           $ echo /

$ ls              $ echo

$ ls *                $ echo *

$ ls *        $ echo *

~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*