Как составить маски для имени файла

Поиск файлов

Маска — это условие
(шаблон) для поиска файла с использованием
символов «*» и
«?». Знак «*» заменяет любое количество
символов в маске в пределах от 1 до 211,
знак «?» —
один произвольный символ или его
отсутствие.

Примеры создания
масок:

*.
* — поиск всех файлов из указанного
диапазона поиска;

*.doс
— поиск всех файлов с расширением dос;

???. * — поиск всех
файлов с именем не более чем из трех
символов;

а*. * — поиск всех
файлов, имена которых начинаются на
букву «а».

Чтобы осуществить
поиск объектов, необходимо в главном
меню Пуск
выбрать
команду Поиск,
появится
диалоговое окно Результат
поиска.

Для того чтобы
приступить к поиску, необходимо следовать
указаниям на левой панели:

  • если нужно найти
    файлы и папки, выберите соответствующий
    пункт;

  • в
    поле Часть
    имени файла или имя файла целиком:
    (рис.
    11)
    ввести
    имя файла
    или задать маску поиска;

  • в поле Слово
    или фраза в файле:
    можно
    ввести фрагмент текста, который должен
    содержать искомый файл;

  • в поле Поиск
    в:
    выбрать
    диск, на котором будет проведен поиск;

  • с помощью
    дополнительных условий: Когда
    были произведены последние изменения?,
    Какой размер файла?, Дополнительные
    параметры
    можно
    найти файлы, которые были созданы или
    изменены в течение определенного
    периода времени; определить размер
    искомого файла;

  • щелкнуть на кнопке
    Найти.

Задания
для тренировки 9.
Поиск
файлов.

  1. На
    всем компьютере найти все файлы с
    расширением bmр.

  2. Скопировать из
    окна поиска два файла в папку под своей
    фамилией.

  1. На всем компьютере
    найти файлы с расширением txt,
    имя которых начинается на букву «г».

  1. Скопировать три
    файла в папку под своей фамилией.

  1. На всем компьютере
    найти файлы, в середине имени
    которых есть буквосочетание «st».

  1. Скопировать три
    файла в папку Письма.

  1. На
    всем компьютере найти файлы с расширением
    txt,
    размером не менее 5 Кб и созданные
    за последние шесть месяцев.

  1. Скопировать два
    файла в папку Письма.

  1. На всем компьютере
    найти файлы, в имени которых
    последняя или предпоследняя буква
    «d».

  1. Скопировать два
    файла в папку Письма.

Задания
для тренировки 10.
Удаление
файлов и папок.

  1. В папке Письма
    выделить
    два файла и удалить.

  2. Очистить содержимое
    папки Корзина.

Программа
Проводник
Рекомендации
к
выполнению заданий

Проводник — это
служебная программа, относящаяся к
категории диспетчеров файлов. Она
предназначена для навигации по файловой
структуре компьютера и ее обслуживания.
Проводник полностью внедрен в операционную
систему ^УшсЬлуз
ХР.
Окно программы Проводник имеет две
рабочие области: левую панель — панель
папок и
правую панель — панель содержимого.

Программу Проводник
можно запустить:

  1. с помощью команды
    контекстного меню кнопки Пуск, Проводник;

  2. с
    помощью команды Проводник контекстного
    меню значка Мой компьютер. Примечание.
    В
    операционной системе ^пкюамз
    ХР
    окно Проводника можно отобразить,
    непосредственно открыв любое окно,
    например папку Мои

документы,
в этом случае должна быть включена
кнопка Папки на
панели

инструментов
Обычные кнопки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Привет, коллеги. Обсудим взаимодействие с оболочкой в смысле имен файлов и файловых масок. Всё сказанное относится к unix-подобным системам: под Windows всё тоже можно, но есть своя специфика, в которую я не углубляюсь.

Файловые маски – это что-то вроде упрощенных регулярных выражений, с метасимволами вроде “любой символ” и “любой текст”.

Маска, но не файловая
Маска, но не файловая

Когда мы употребляем файловые маски в командной строке Вим, они раскрываются. Можно раскрыть их и самостоятельно, получив имя файла (или имена файлов) с помощью функции expand. Функция эта позволяет расшифровать специальные символы (маски) в именах файлов, среди которых самые распространенные – это * и ?, означающие “любое число любых символов” и “один произвольный символ”. Так, *.* означает “любой файл с расширением”, *.txt — любой текстовый файл, ?.??? — файл с именем из одной буквы и расширением из трех, и так далее. Помним, что * совпадает и с нулем символов, то есть *italian* совпадет и с my_italian_poesy, и просто с italian.

Менее известна конструкция [abc], которая похожа на символьный класс регулярных выражений и им и является: это любой один символ из перечисленных. Так, *[1-9].dat — файл с данным расширением, у которого имя кончается на цифру.

Самая сложная маска — это **. Большого смысла трактовать это как две маски * подряд, нет. Это означает “что угодно”, но применяется рекурсивно к каталогам. До ста каталогов в глубину. Так, **/файл.txt совпадет с данным файлом в текущем каталоге и любом его подкаталоге, включая вложенные. А просто */файл.txt совпадет только с файлом в подкаталоге. Если обычный символ стоит сразу после или непосредственно перед **, то этот текст должен совпасть только в имени каталога верхнего уровня. То есть, /usr/inc**/file.inc будет найден в /usr/include и его подкаталогах, а также в каталоге /usr/inc/ и его подкаталогах, в каталоге /usr/increase и в его подкаталогах, и т.п. Это довольно удобно, на самом деле, если освоить.

Функция expand возвращает строку с именем файла, подпадающим под маску, которую вы указали. Если файлов много, их имена разделены символом новой строки.

Например, expand(“*.tex”) или expand(“**/*.tex”).

Можно раскрывать и переменные окружения, например, expand($PATH).

Есть и магия. Если выражение начинается с %, решетки или <, то оно трактуется по-особенному. Символ % означает “текущий файл”, решетка означает “другой файл”, решетка с номером — другой файл по номеру, и есть еще символы. Вот некоторые из них:

  • <cfile> — имя файла под курсором (может потребовать дополнительной расшифровки, скажем, если там ~/file.txt)
  • <sfile> — имя скрипта или функции
  • <slnum> — номер строки в файле скрипта или функции
  • <cword> или <cWORD> — слово под курсором. Слово в смысле w или W, соответственно.

Можно употреблять модификаторы, с которыми мы уже знакомы:

  • :p — дополнить имя файла до полного пути
  • :h — путь (отцепляется последний элемент пути)
  • :t — файл (оставляется последний элемент пути)
  • :r — отцепляется расширение
  • :e — оставляется только расширение
  • :. — путь относительно текущего каталога (если можно). Например, если файл лежит в /home/math/dissert/pics/scheme.eps, а мы находимся в /home/math/dissert, то получим pics/scheme.eps
  • :~ — то же относительно домашнего каталога.
  • :s?pat?sub? заменяет первое вхождение pat на sub, причем pat — регулярное выражение. Разделитель может быть и другой: любой другой символ, только его не должно быть между.
  • :gs?pat?sub? — то же самое, но заменяет все вхождения.

:S — действует, как shellescape (см. далее).

Например, я открываю файл:

:tabnew ../1.bib

Даю команду :echo expand(‘%’)

Получаю /home/math/1.bib — то же, что даст и %:p

:echo expand(‘%:h’) — /home/math/

:echo expand(‘%:t’) — 1.bib

:echo expand(‘%:r’) — 1

:echo expand(‘%:e’) — bib

Модификаторы можно комбинировать.

А можно же expand(‘%:r’) . ‘.tex’ — поменять расширение.

А можно сделать это проще: expand(‘%:s?bib?tex?’).

Функция escape принимает две строки и позволяет экранировать (снабдить слешем ) все символы, перечисленные во втором аргументе.

Например, escape(‘***’, ‘*’) вернет ‘***’

Это функция общего назначения, а есть более специфичная shellescape, которая готовит строку к использованию в командной строке оболочки.

Она поместит строку в одинарные кавычки и заменит все такие кавычки внутри на ”’ (именно кавычка слеш две кавычки).

Если присутствует второй аргмент и это не нуль и не пустая строка, то экранируются также символы !, % и некоторые другие.

Примеры:

:exe ‘!ls ‘ . shellescape(expand(‘<cfile>:h’), 1)

:call system(“chmod +w — ” . shellescape(expand(“%”)))

Можно избежать прямого вызова shellescape, применив модификатор :S, если модификаторы уместны.

Вернемся к командной строке Вим. Помимо файловых масок, можно применять еще обратные кавычки `…` (кавычка эта обычно слева сверху на клавиатуре, где тильда и буквы Ё). Их содержимое будет выполнено оболочкой, а команда Вим получит ее результат. Примеры из Справки:

:next `find . -name ver\*.c -print`

:view `ls -t *.patch | head -n1`

Слеши перед звездочкой нужны, чтобы оболочка не раскрыла маску, а передала ее команде find.

Это применение обратных кавычек стандартно: так же они используются в bash, Перл и не только.

И вы понимаете, что это небезопасно, особенно если вы вызываете что-то не своё.

В Вим есть особенность: если после обратной кавычки стоит знак равенства, то выражение в обратных кавычках вычисляется как выражение Вим.

Это позволяет, в частности, вызывать любые функции, так что можно делать вообще, что хотите:

:tabnew `=MyFileName()`

Функция MyFileName должна вернуть имя файла. Можете, например, запрашивать пароль))

Но это уже другая история…

Задание 2

Маски имен файлов.

Маска (шаблон) — имена файлов, в которых используются символы «*» и «?». Символ «?»заменяет один любой символ. Например, маска text?.doc означает все файлы с именами text1.doc , text2.doc , texta.doc и т.д.

Символ «*» заменяет любое число произвольных символов (в том числе и отсутствие символа). Например, маска text*.doc означает все файлы с именами text1.doc , text2.doc , texta.doc , text11.doc , textabc.doc , text.doc и т.д. Маска *.com означает все файлы с любыми именами и расширением .com . Маска text.* означает все файлы с именем text и любыми расширениями. Маска *.* означает все файлы (т.е. с любыми именами и расширениями).

Маски удобно использовать, если Вы не уверены в правильности написания имени нужного Вам файла или хотите найти все файлы какого-то одного типа и выполнить над ними какую-то операцию. Например, по команде удалить из текущего каталога файлы *.* из него будут удалены все файлы.

Задание: «Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. 

Определите, какое из указанных имен файлов удовлетворяет маске:

                         ?hel*lo.c?*.



Варианты ответов (выбери только один вариант):
              1. hello.c
          2. hello.cpp
          3. hhelolo.cpp
          4. hhelolo.c


В комментарии напиши только верный вариант ответа. Не забудь подписать комментарий!

    Добавить комментарий