Потужні узагальнюючі символи - 2.0
Без цих прохолодних дрібниць, що називаються символами оболонки оболонки, робота над командним рядком Linux досить болюча. Тому переконайтеся, що ви вклали шаблони у хороше використання.
< Що таке шаблони оболонок >
Символи - це функція оболонки, яка робить командний рядок набагато потужнішим за будь-які файлові менеджери графічного інтерфейсу. Розумієте, якщо ви хочете виділити велику групу файлів у графічному менеджері файлів, вам, як правило, доводиться вибирати їх за допомогою миші. Це може здатися простим, але в деяких випадках це може дуже засмутити. Наприклад, припустімо, у вас є каталог з величезною кількістю всіляких файлів і підкаталогів, і ви вирішили перемістити всі файли HTML, у яких слово «linux» є десь посередині їх імен, із цього великого каталогу в інший каталог. Який простий спосіб це зробити? Якщо каталог містить величезну кількість файлів HTML з різним іменем, ваше завдання - все, окрім простого!
У Linux CLI це завдання так само просто виконати, як переміщення лише одного HTML-файлу, і це настільки просто через оболонки символів оболонки. Узагальнюючі символи - це спеціальні символи, що дозволяють вибирати імена файлів, що відповідають певним шаблонам символів. Це допомагає виділити навіть велику групу файлів, набравши лише кілька символів, і в більшості випадків це простіше, ніж вибір файлів за допомогою миші.
Ось список найбільш часто використовуваних символів підстановки в bash:
Джокер | Сірники |
* | нуль або більше символів |
? | точно один символ |
[abcde] | точно в списку одного символу |
[ae] | рівно один символ у даному діапазоні |
[! abcde] | будь-який символ, який не вказаний у списку |
[! ae] | будь-який символ, який не знаходиться в даному діапазоні |
{debian, linux} | точно одне ціле слово в наданих варіантах |
Ви можете використовувати маски з будь-якою командою, яка приймає імена файлів як аргументи.
< Приклади шаблонів >
Давайте наведемо кілька прикладів. Ймовірно, символ * вам уже знайомий, тому що він широко використовується і в багатьох інших місцях, не тільки в Linux. Наприклад, наступне видаляє кожен файл із поточного каталогу:
$ rm *
Наступна команда переміщує всі файли HTML, у назвах яких є слово “linux”, з робочого каталогу у каталог із іменем dir1
:
$ mv *linux*.html dir1
Дивіться, я сказав вам, що переміщення декількох файлів може бути таким же простим, як переміщення лише одного файлу!
Нижче наведено всі файли, які починаються з d
і закінчуються .txt
:
$ less d*.txt
Наступна команда видаляє всі файли, імена яких починаються з junk.
, за якими йдуть рівно три символи:
$ rm junk.???
За допомогою цієї команди ви перераховуєте всі файли або каталоги, чиї імена починаються з hda
, за якими йде рівно одна цифра:
$ ls hda[0-9]
Тут буде показано список всіх файлів або каталогів, які починаються з hda
, за якими слідують точно два цифри:
$ ls hda[0-9][0-9]
Нижче перераховані всі файли або каталоги, ім'я яких починається з будь-якого з них hd
or sd
, за яким слідує будь-який окремий символ a
та c
:
$ ls {hd,sd}[a-c]
Ця команда копіює всі файли, які починаються з великої літери, до каталогу dir2
:
$ cp [A-Z]* dir2
Це видаляє всі файли, які не закінчуються c
, e
, h
or g
:
$ rm *[!cehg]
Я міг би продовжувати і далі з цими прикладами, але ви отримаєте ідею. Ви можете використовувати прості шаблони або поєднувати різні шаблони і створювати дуже складні шаблони, і, як я вже говорив, ви можете використовувати їх з будь-якими командами, які приймають імена файлів як аргументи.