Всем привет! Сегодня поговорим о том, что такое шаблоны и как ими пользоваться.
Давайте создадим 20 файлов с названиями file1, file2, ..., file20. Вы уже наверняка подумали о том, что это утомительное занятие. Нужно ввести аж 20 команд! Есть чуть более простой способ. Если вы читали документацию (мануал) по команде touch, то наверняка узнали, что ей можно передавать несколько аргументов, тогда она создаст файлы со всеми перечисленными названиями. Чуть лучше, но всё равно долго. Сейчас я вам покажу компактную команду, которая приводит нас к цели:
touch file{1..20}
Вуаля! Мы написали одну команду, а компьютер выполнил для нас все 20. Замечательно, не правда ли? Я посчитал, что проще не объяснять, как это работает, а показать несколько примеров:
touch {a..z} (создаёт файлы с названиями a, b, c, ..., z)
touch {A..E}_file (создаёт файлы с названиями A_file, B_file, C_file, D_file, E_file)
touch {A..C}{1..3} (создаст файлы с названиями из двух букв, где на первом месте будет стоять A, B или C, а на втором - одна из цифр 1, 2 или 3. Например: A1, B1, B2, C3 и так далее)
Отлично. Теперь давайте перейдём к рассмотрению шаблонов (Globbing).
Мы создали очень много файлов, давайте теперь их удалим. Только делать мы это будем не с помощью фигурных скобок, а с помощью шаблонов, которые являются более мощным инструментом.
Сначала удалим файлы вида fileX, которые были созданы в самом начале:
rm file*
Звёздочка означает ноль или более любых символов. То есть, в данном случае, удалены будут все файлы, которые начинаются на file, а заканчиваются чем угодно. Приведу ещё несколько примеров:
rm *.txt (удалит все файлы, которые заканчиваются на .txt . Читается как: любое количество любых символов, а затем .txt)
rm a*p (удалит файлы, названия которых начинаются на букву a и заканчиваются буквой p. Например aooop, aip, ap. Можно прочитать как: символ a, затем любое количество любых символов, а затем символ p)
Рассмотрим ещё один символ, который используется в шаблонах - знак вопроса:
rm ? (удалит файлы, название которых состоит из одного символа)
? означает ровно один любой символ. Рассмотрим ещё пару примеров, чтобы лучше понять назначение вопросика:
rm abc?e (можно прочитать как: сначала abc, затем один любой символ, затем e. Под этот шаблон подойдут, например, такие названия: abcde, abcee)
rm ??? (удалит все файлы, названия которых состоит ровно из трёх символов)
И последний элемент шаблонов - это квадратные скобки []:
rm [A-E]_file (удалит файлы вида X_file)
rm [A-C][1-3] (удалит файлы, которые мы создавали последними)
Как мы видим, [] очень похожи на {}. Только, чтобы указать диапазон, вместо двух точек используется минус. В квадратных скобках не обязательно должен быть диапазон значений, значения можно просто перечислить:
rm [abc] (удалит файлы с названиями a, b и c)
rm [a-cA-D] (удалит файлы с названиями: a, b, c, A, B, C, D)
rm a[0-3z]c (читается как: сначала a, затем один символ из набора {0, 1, 2, 3, z}, затем символ c)
Как вы уже поняли, квадратные скобки задают набор символов, если в квадратных скобках первым символом поставить ! знак, это будет означать: "всё, кроме символов из набора". Посмотрим пример:
rm [!abc] (удалит все файлы, кроме файлов с названием a, b и с)
rm [!a-zA-Z]* (удалит все файлы, кроме тех, где на первом месте стоит латинская буква)
Кстати, шаблоны можно применять не только к удалению, а ко многим другим командам. ls по умолчанию работает для текущей папки, но можно ей передать путь директории:
ls ??? (запустит ls для всех папок, которые имеют в названии ровно три символа)
Надеюсь, это вам не показалось трудным. Пробуйте применять шаблоны, где участвуют все три элемента. Также, будьте аккуратны с командой rm, файлы удаляются навсегда!
P.S. Чтобы удалить файлы, где присутствуют символы \ (обратный слэш), [] (квадратные скобки), * (звёздочка), ? (знак вопроса) нужно брать имя файла в одинарные кавычки. Тогда все символы будут интерпретироваться так, как они написаны:
rm '[abc]' (удалит файл с названием [abc] )
Можно также ставить перед специальными символами обратный слэш:
rm \[abc\] ( \[ будет читаться как просто открывающаяся скобка, а \] - как закрывающаяся)
Соответственно \\ - будет считаться просто одним обратным слэшем, \? - знаком вопроса, \* - звёздочкой.
Давайте создадим 20 файлов с названиями file1, file2, ..., file20. Вы уже наверняка подумали о том, что это утомительное занятие. Нужно ввести аж 20 команд! Есть чуть более простой способ. Если вы читали документацию (мануал) по команде touch, то наверняка узнали, что ей можно передавать несколько аргументов, тогда она создаст файлы со всеми перечисленными названиями. Чуть лучше, но всё равно долго. Сейчас я вам покажу компактную команду, которая приводит нас к цели:
touch file{1..20}
Вуаля! Мы написали одну команду, а компьютер выполнил для нас все 20. Замечательно, не правда ли? Я посчитал, что проще не объяснять, как это работает, а показать несколько примеров:
touch {a..z} (создаёт файлы с названиями a, b, c, ..., z)
touch {A..E}_file (создаёт файлы с названиями A_file, B_file, C_file, D_file, E_file)
touch {A..C}{1..3} (создаст файлы с названиями из двух букв, где на первом месте будет стоять A, B или C, а на втором - одна из цифр 1, 2 или 3. Например: A1, B1, B2, C3 и так далее)
Отлично. Теперь давайте перейдём к рассмотрению шаблонов (Globbing).
Мы создали очень много файлов, давайте теперь их удалим. Только делать мы это будем не с помощью фигурных скобок, а с помощью шаблонов, которые являются более мощным инструментом.
Сначала удалим файлы вида fileX, которые были созданы в самом начале:
rm file*
Звёздочка означает ноль или более любых символов. То есть, в данном случае, удалены будут все файлы, которые начинаются на file, а заканчиваются чем угодно. Приведу ещё несколько примеров:
rm *.txt (удалит все файлы, которые заканчиваются на .txt . Читается как: любое количество любых символов, а затем .txt)
rm a*p (удалит файлы, названия которых начинаются на букву a и заканчиваются буквой p. Например aooop, aip, ap. Можно прочитать как: символ a, затем любое количество любых символов, а затем символ p)
Рассмотрим ещё один символ, который используется в шаблонах - знак вопроса:
rm ? (удалит файлы, название которых состоит из одного символа)
? означает ровно один любой символ. Рассмотрим ещё пару примеров, чтобы лучше понять назначение вопросика:
rm abc?e (можно прочитать как: сначала abc, затем один любой символ, затем e. Под этот шаблон подойдут, например, такие названия: abcde, abcee)
rm ??? (удалит все файлы, названия которых состоит ровно из трёх символов)
И последний элемент шаблонов - это квадратные скобки []:
rm [A-E]_file (удалит файлы вида X_file)
rm [A-C][1-3] (удалит файлы, которые мы создавали последними)
Как мы видим, [] очень похожи на {}. Только, чтобы указать диапазон, вместо двух точек используется минус. В квадратных скобках не обязательно должен быть диапазон значений, значения можно просто перечислить:
rm [abc] (удалит файлы с названиями a, b и c)
rm [a-cA-D] (удалит файлы с названиями: a, b, c, A, B, C, D)
rm a[0-3z]c (читается как: сначала a, затем один символ из набора {0, 1, 2, 3, z}, затем символ c)
Как вы уже поняли, квадратные скобки задают набор символов, если в квадратных скобках первым символом поставить ! знак, это будет означать: "всё, кроме символов из набора". Посмотрим пример:
rm [!abc] (удалит все файлы, кроме файлов с названием a, b и с)
rm [!a-zA-Z]* (удалит все файлы, кроме тех, где на первом месте стоит латинская буква)
Кстати, шаблоны можно применять не только к удалению, а ко многим другим командам. ls по умолчанию работает для текущей папки, но можно ей передать путь директории:
ls ??? (запустит ls для всех папок, которые имеют в названии ровно три символа)
Надеюсь, это вам не показалось трудным. Пробуйте применять шаблоны, где участвуют все три элемента. Также, будьте аккуратны с командой rm, файлы удаляются навсегда!
P.S. Чтобы удалить файлы, где присутствуют символы \ (обратный слэш), [] (квадратные скобки), * (звёздочка), ? (знак вопроса) нужно брать имя файла в одинарные кавычки. Тогда все символы будут интерпретироваться так, как они написаны:
rm '[abc]' (удалит файл с названием [abc] )
Можно также ставить перед специальными символами обратный слэш:
rm \[abc\] ( \[ будет читаться как просто открывающаяся скобка, а \] - как закрывающаяся)
Соответственно \\ - будет считаться просто одним обратным слэшем, \? - знаком вопроса, \* - звёздочкой.
Комментариев нет:
Отправить комментарий