Потужні баш-символи в Linux

Потужні узагальнюючі символи - 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

Це видаляє всі файли, які не закінчуються ceh or g:
rm *[!cehg]

Я міг би продовжувати і далі з цими прикладами, але ви отримаєте ідею. Ви можете використовувати прості шаблони або поєднувати різні шаблони і створювати дуже складні шаблони, і, як я вже говорив, ви можете використовувати їх з будь-якими командами, які приймають імена файлів як аргументи.