Какое из следующих имен файлов соответствует маске mar do

Обновлено: 21.11.2024

Для поиска определенной строки символов в файле используйте команду grep. Основной синтаксис команды grep:

В этом примере строка — это слово или фраза, которую вы хотите найти, а файл — файл, который нужно найти.

Строка состоит из одного или нескольких символов. Одна буква представляет собой строку, как слово или предложение. Строки могут содержать пробелы, знаки препинания и невидимые (управляющие) символы.

Например, чтобы найти добавочный номер телефона Эдгара Аллана По, введите grep , полное или частичное его имя и файл, содержащий информацию:

Обратите внимание, что заданному шаблону может соответствовать несколько строк.

grep чувствителен к регистру; то есть вы должны сопоставить шаблон в отношении прописных и строчных букв:

Обратите внимание, что команда grep не удалась с первой попытки, так как ни одна из записей не начиналась со строчной буквы a.

grep как фильтр

Вы можете использовать команду grep в качестве фильтра с другими командами, что позволит вам отфильтровать ненужную информацию из вывода команды. Чтобы использовать grep в качестве фильтра, вы должны направить вывод команды через grep. Символ трубы: «|

В следующем примере отображаются файлы, которые заканчиваются на «.ps», и которые были созданы в сентябре.

Первая часть этой командной строки создает список файлов, оканчивающихся на .ps .

Вторая часть командной строки передает список через grep в поисках шаблона Sep.

Поиск дает следующие результаты.

grep со строками из нескольких слов

Чтобы найти шаблон длиной более одного слова, заключите строку в одинарные или двойные кавычки.

Команда grep может искать строку в группах файлов. Когда он находит шаблон, который соответствует более чем одному файлу, он печатает имя файла, за которым следует двоеточие, а затем строка, соответствующая шаблону.

Поиск строк без определенной строки

Чтобы найти все строки файла, не содержащие определенную строку, используйте параметр -v для grep . В следующем примере показано, как искать во всех файлах в текущем каталоге строки, не содержащие букву e.

Использование регулярных выражений с grep

Вы также можете использовать команду grep для поиска целей, определенных как шаблоны, с помощью регулярных выражений. Регулярные выражения состоят из букв и цифр, а также символов, имеющих специальное значение для grep. Эти специальные символы, называемые метасимволами, также имеют особое значение для системы. Когда вы используете регулярные выражения с командой grep, вам нужно указать вашей системе игнорировать особое значение этих метасимволов, экранируя их. Когда вы используете регулярное выражение grep в командной строке, заключите регулярное выражение в кавычки. Экранируйте метасимволы (такие как & ! . * $ ? и \ ) с помощью обратной косой черты ( \ ). Дополнительную информацию об экранировании метасимволов см. в разделе Поиск метасимволов.

Метасимвол вставки (^) указывает на начало строки. Следующая команда находит в списке файлов любую строку, начинающуюся с буквы b.

Метасимвол доллара ( $ ) указывает на конец строки. Следующая команда отображает любую строку, в которой b является последним символом строки.

Следующая команда отображает любую строку в списке файлов, где b — единственный символ в строке.

В регулярном выражении точка ( . ) находит один любой символ. Следующая команда сопоставляет любую трехсимвольную строку с первыми двумя символами "an", включая "любой", "и", "управление" и "план" (поскольку пробелы тоже учитываются).

Когда за символом следует звездочка ( * ), grep интерпретирует звездочку как «ноль или более экземпляров этого символа». Когда звездочка следует за регулярным выражением, grep интерпретирует звездочку как «ноль или более вхождений символов, соответствующих шаблону».

Поскольку звездочка не содержит вхождений, она может привести к путанице в выводе команды. Если вы хотите найти все слова, в которых есть буквы «цю», введите следующую команду.

Однако, если вы хотите найти все слова, содержащие букву «н», введите следующую команду.

Если вы хотите найти все слова, содержащие шаблон «nn», введите следующую команду.

Чтобы сопоставить ноль или более вхождений любого символа в списке , введите следующую команду.

Поиск метасимволов

Чтобы использовать команду grep для поиска метасимволов, таких как & ! . * ? и \ , поставьте перед метасимволом обратную косую черту (\). Обратная косая черта указывает grep игнорировать (экранировать) метасимвол.

Например, следующее выражение соответствует строкам, начинающимся с точки, и полезно при поиске запросов на форматирование nroff или troff (начинающихся с точки).

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

glob — найти пути, соответствующие шаблону

Описание

Функция glob() ищет все пути, соответствующие шаблону, в соответствии с правилами, используемыми функцией libc glob(), которые аналогичны правилам, используемым в обычных оболочках.

Параметры

Шаблон. Расширение тильды или подстановка параметров не выполняются.

  • * — соответствует нулю или более символов.
  • <ли>? - Соответствует ровно одному символу (любому символу).
  • [. ] — соответствует одному символу из группы символов. Если первый символ ! , соответствует любому символу, не входящему в группу.
  • \ — экранирует следующий символ, за исключением случаев, когда используется флаг GLOB_NOESCAPE.
  • GLOB_MARK – добавляет косую черту (обратную косую черту в Windows) к каждому возвращаемому каталогу.
  • GLOB_NOSORT — возвращает файлы в том виде, в котором они появляются в каталоге (без сортировки). Если этот флаг не используется, пути сортируются в алфавитном порядке
  • GLOB_NOCHECK — возвращает шаблон поиска, если не найдено ни одного файла, соответствующего ему.
  • GLOB_NOESCAPE — обратная косая черта не заключает метасимволы в кавычки.
  • GLOB_BRACE – расширяется до соответствия буквам "a", "b" или "c"
  • GLOB_ONLYDIR — возвращает только те записи каталога, которые соответствуют шаблону
  • GLOB_ERR — останавливаться при ошибках чтения (например, нечитаемых каталогах), по умолчанию ошибки игнорируются.

Примечание. Флаг GLOB_BRACE недоступен в некоторых системах, отличных от GNU, таких как Solaris или Alpine Linux.

Возвращаемые значения

Возвращает массив, содержащий совпадающие файлы/каталоги, пустой массив, если не найден ни один файл, или false в случае ошибки.

Примечание:

В некоторых системах невозможно отличить пустое совпадение от ошибки.

Примеры

foreach ( glob ("*.txt" ) as $filename ) <
echo " $filename size " . размер файла ($имя_файла). "\n" ;
>
?>

Приведенный выше пример выведет что-то похожее на:

Примечания

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

Примечание. Эта функция недоступна в некоторых системах (например, в старых ОС Sun).

См. также

  • opendir() — открыть дескриптор каталога
  • readdir() — чтение записи из дескриптора каталога
  • closedir() — закрыть дескриптор каталога
  • fnmatch() — сопоставление имени файла с шаблоном

Пользовательские заметки 48 заметок

Поскольку я чувствую, что это довольно расплывчато и бесполезно, я решил сделать пост с подробным описанием механики регулярного выражения glob.

glob использует два специальных символа, которые действуют как смесь метасимвола и квантификатора. Эти два символа — * и ?

? соответствует 1 любому символу, кроме /
* соответствует 0 или более любому символу, кроме /

Если это поможет, подумайте о * как о pcre-эквиваленте .* и ? как pcre-эквивалент точки (.)

Примечание: * и ? функционировать независимо от предыдущего символа. Например, если вы сделаете glob("a*.php") для следующего списка файлов, будут возвращены все файлы, начинающиеся с "a", но сам * будет соответствовать:

a.php // * ничего не соответствует
aa.php // * соответствует второму 'a'
ab.php // * соответствует 'b'
abc.php // * соответствует 'bc'
b.php // * ничему не соответствует, потому что начальный 'a' не соответствует
bc.php // * ничему не соответствует, потому что начальный 'a' не соответствует
bcd .php // * ничего не соответствует, потому что начальная буква 'a' неверна

Оно не соответствует только a.php и aa.php, как "обычное" регулярное выражение, потому что оно соответствует 0 или более любых символов, а не символу/классу/группе перед ним.

Выполнение glob("a?.php") для того же списка файлов вернет только aa.php и ab.php, потому что, как уже упоминалось, ? является эквивалентом точки pcre и НЕ совпадает с символом pcre ?, который соответствует 0 или 1 предыдущего символа.

Регулярное выражение glob также поддерживает классы символов и классы отрицательных символов, используя синтаксис [] и [^]. Он будет соответствовать любому символу внутри [] или любому символу, которого нет в [^].

С тем же списком выше, выполнение

glob("[ab]*.php) вернет (все):
a.php // [ab] соответствует 'a', * ничего не соответствует
aa.php // [ab] соответствует 'a', * соответствует второму 'a'
ab.php // [ab] соответствует 'a', * соответствует 'b'
abc.php // [ab] соответствует ' a', * соответствует 'bc'
b.php // [ab] соответствует 'b', * ничему не соответствует
bc.php // [ab] соответствует 'b', * соответствует 'c'
bcd.php // [ab] соответствует 'b', * соответствует 'cd'

glob("[ab].php") вернет a.php и b.php

glob("[^a]*.php") вернет:
b.php // [^a] соответствует 'b', * ничего не соответствует
bc.php // [^ a] соответствует 'b', * соответствует 'c'
bcd.php // [^a] соответствует 'b', * соответствует 'cd'

glob("[^ab]*.php") ничего не вернет, потому что класс символов не будет соответствовать первому символу.

Вы также можете использовать диапазоны символов внутри класса символов, используя начальный и конечный символы с дефисом между ними. Например, [a-z] соответствует любой букве от a до z, 8 соответствует любой (одной) цифре и т. д.

glob также поддерживает ограниченное чередование с . Вы должны указать GLOB_BRACE в качестве второго аргумента для glob, чтобы он работал. Так, например, если вы выполнили команду glob(".php", GLOB_BRACE) для следующего списка файлов:

все трое вернутся. Примечание: использование чередования с такими одиночными символами — это то же самое, что просто выполнить команду glob("[abc].php"). Более интересным примером может быть glob("te.php", GLOB_BRACE) on:

tent.php
text.php
test.php
tense.php

text.php и tense.php будут возвращены из этого шаблона.

Регулярное выражение glob не предлагает какого-либо количественного определения указанного символа, класса символов или чередования. Например, если у вас есть следующие файлы:

a.php
aa.php
aaa.php
ab.php
abc.php
b.php
bc.php

с регулярным выражением pcre вы можете сделать ~^a+\.php$~ для возврата

Это невозможно с помощью glob. Если вы пытаетесь сделать что-то подобное, вы можете сначала сузить его с помощью glob, а затем получить точные совпадения с помощью полноценного механизма регулярных выражений. Например, если вы хотите, чтобы все php-файлы в предыдущем списке содержали только одну или несколько букв «а», вы можете сделать это:

= глоб ("a*.php");
foreach ( $list as $l ) <
if ( preg_match («~^a+\.php$~», $file ))
$files [] = $l ;
>
?>

glob также не поддерживает просмотр назад, просмотр вперед, атомарное группирование, захват или любую из функций регулярных выражений «более высокого уровня».

glob не поддерживает метасимволы быстрого доступа, такие как \w или \d.

Тем из вас, у кого есть PHP 5, не нужно придумывать эти дикие функции для рекурсивного сканирования каталога: это может сделать SPL.

= новый итератор RecursiveDirectoryIterator ("/path");
$iterator = new RecursiveIteratorIterator ( $dir_iterator , RecursiveIteratorIterator :: SELF_FIRST );
// можно использовать CHILD_FIRST, если хотите

foreach ( $iterator as $file ) echo $file , "\n" ;
>

?>

Не говоря уже о том, что $file будет классом SplFileInfo, так что вы сможете легко делать мощные вещи:

= 0 ;
foreach ( $iterator as $file ) if ( $file -> isFile ()) echo substr ( $file -> getPathname (), 27 ) . ":" . $файл -> получить размер () . "В; модифицированный". дата ("Г-м-д" , $file -> getMTime ()) . "\п" ;
$size += $file -> getSize ();
>
>

echo "\nОбщий размер файла: " , $size , " байт\n" ;

Общий размер файла: 5281063 байт

glob чувствителен к регистру даже в системах Windows.

Однако он поддерживает классы символов, поэтому нечувствительная к регистру версия
( 'my/dir/*.csv' ) ?>

может быть записана как
( 'мой/каталог/*.[cC][sS][vV]' ) ?>

Обратите внимание, что glob('*') по умолчанию игнорирует все "скрытые" файлы. Это означает, что он не возвращает файлы, начинающиеся с точки (например, «.file»).
Если вы хотите сопоставить и эти файлы, вы можете использовать "*" в качестве шаблона с флагом GLOB_BRACE.

// Поиск всех файлов, соответствующих .* или *
$files = glob ('*', GLOB_BRACE);
?>

Примечание. Это также возвращает специальные записи каталога. и ..

В дополнение к рекурсивному определению всех путей (автор viajy из yoyo dot org) и тому, что opendir работает быстрее, чем glob (автор Sam Yong — hellclanner в live [dot] com).

Похоже, код списка всех каталогов не работает, по крайней мере, на моем сервере (предоставлено parazuce [at] gmail [dot] com).

Мне нужна была функция для создания неограниченного многомерного массива с неповрежденными именами папок/файлов (без реальных путей, хотя это вполне возможно). Это значит, что я могу просто прокрутить массив, создать расширяемую ссылку на имя папки со всеми файлами внутри нее.

Я считаю, что это правильный способ рекурсии (без статики, возвращать небольшие массивы для создания многомерного массива) и включает проверку файлов/папок, начинающихся с точек.

// могут потребоваться изменения

функция list_files($path)
$files = array();

функция list_html($list)
$html = "";

foreach($list as $folder => $file)
if(is_array($list[$folder]))
$html . . $ папка . "
";
$html .= list_html($list[$folder]);
>
еще
$html .= "(файл)" . $ файл . "
";
>
>

Мне нужно решить, соответствует ли имя файла маске файла. Маска файла может содержать * или ? персонажи. Есть ли какое-нибудь простое решение для этого?

13 ответов 13

Я ценю, что нашел ответ Джоэла, он также сэкономил мне время! Однако мне пришлось внести несколько изменений, чтобы метод работал так, как ожидало большинство пользователей:

  • Я удалил ключевое слово this перед первым аргументом. Здесь он ничего не делает (хотя может быть полезен, если метод предназначен для использования в качестве метода расширения, и в этом случае он должен быть общедоступным и содержаться в статическом классе, а сам должен быть статическим методом).
  • Я сделал регулярное выражение независимым от регистра, чтобы оно соответствовало стандартному поведению подстановочных знаков Windows (например, "c*.*" и "C*.*" возвращают один и тот же результат).
  • Я добавил начальную и конечную привязки к регулярному выражению, опять же, чтобы соответствовать стандартному поведению подстановочных знаков Windows (например, "stuff.txt" будет соответствовать "stuff*", "s*" или "s*.*", но а не просто "s").

Обновление 2009.11.04: соответствие одной из нескольких масок

Для еще большей гибкости здесь используется плагин-совместимый метод, созданный поверх оригинала. Эта версия позволяет передавать несколько масок (отсюда множественное число во втором имени параметра fileMasks), разделенных линиями, запятыми, вертикальными чертами или пробелами. Я хотел, чтобы пользователь мог поместить в ListBox столько вариантов, сколько пожелает, а затем выбрать все файлы, соответствующие любому из них. Обратите внимание, что некоторые элементы управления (например, ListBox) используют CR-LF для разрывов строк, в то время как другие (например, RichTextBox) используют только LF, поэтому и "\r\n", и "\n" отображаются в списке разделения.< /p>

Обновление 2009.11.17: более изящная обработка входных данных fileMask

Предыдущая версия FitsMask (которую я оставил для сравнения) неплохо справляется со своей задачей, но, поскольку мы рассматриваем ее как регулярное выражение, она выдает исключение, если при входе не является допустимым регулярным выражением. Решение состоит в том, что мы действительно хотим, чтобы любые метасимволы регулярных выражений во входном файлеMask считались литералами, а не метасимволами. Но нам все еще нужно специально обрабатывать точку, звездочку и вопросительный знак. Таким образом, эта улучшенная версия FitsMask безопасно убирает эти три символа, преобразует все оставшиеся метасимволы в литералы, а затем возвращает три интересных символа обратно в их "регулярно выраженную" форму.

Еще одно незначительное улучшение – возможность независимости от регистра в соответствии со стандартным поведением Windows.

Обновление 30.09.2010: где-то по пути возникла страсть.

Я небрежно не обновил это ранее, но эти ссылки, вероятно, будут интересны читателям, которые дошли до этого места:

Узнайте, как экспортировать документы, монтажные области и слои в различных форматах и ​​размерах.

Обновлено в августе 2021 г. (v22.5)

В этом выпуске экспорт документов Photoshop в формате SVG больше не поддерживается в Photoshop с помощью параметра «Экспортировать как». «Экспортировать как SVG» больше не поддерживается из-за редкого использования и ограничений. Чтобы узнать больше, см. раздел «Экспортировать как SVG в Photoshop».

Вы можете использовать параметры «Быстрый экспорт как» и «Экспортировать как», чтобы экспортировать документ Photoshop, монтажные области, слои и группы слоев в файлы форматов PNG, JPG и GIF.

Используйте параметр "Быстрый экспорт как", если вы хотите быстро экспортировать свою работу на основе параметров, указанных в настройках быстрого экспорта.

Чтобы получить доступ к параметру "Быстрый экспорт как", выполните одно из следующих действий:

  • Выберите «Файл» > «Экспорт» > «Быстрый экспорт как [формат изображения]».
  • Перейдите на панель «Слои». Выберите слои, группы слоев или монтажные области, которые вы хотите экспортировать. Щелкните правой кнопкой мыши выделенный фрагмент и выберите в контекстном меню пункт "Быстрый экспорт как [формат изображения]".

Настройки быстрого экспорта

Настройки быстрого экспорта для формата, местоположения, метаданных и цветового пространства

По умолчанию Quick Export создает ресурсы в формате PNG с прозрачностью и каждый раз предлагает вам выбрать место для экспорта.

Чтобы изменить настройки быстрого экспорта, выполните одно из следующих действий:

  • Выберите «Правка» > «Настройки» > «Экспорт».
  • Выберите «Файл» > «Экспорт» > «Настройки экспорта».

Установите параметры экспорта в Photoshop

В диалоговом окне "Настройки" можно указать следующие параметры:

Место быстрого экспорта: выберите этот параметр, чтобы выбрать место для изображений, экспортируемых с помощью быстрого экспорта. Выберите один из следующих вариантов:

  • Спрашивать, куда экспортировать каждый раз . Предлагает выбрать место каждый раз, когда вы экспортируете ресурсы.
  • Экспортировать файлы в папку ресурсов рядом с текущим документом: ресурс изображения помещается во вложенную папку с именем Ресурсы в папке, содержащей исходный документ Photoshop.

Быстрый экспорт метаданных. Используйте этот параметр, чтобы включить метаданные — информацию об авторских правах и контактную информацию — в экспортируемые ресурсы.

Быстрый экспорт цветового пространства: выберите, хотите ли вы преобразовать ресурсы в цветовое пространство sRGB.

Экспортировать как местоположение: см. раздел «Экспортировать как» ниже.

Используйте параметр «Экспортировать как», чтобы точно настроить параметры экспорта каждый раз, когда вы экспортируете слои, группы слоев, монтажные области или документы Photoshop в виде изображений. Каждый выбранный слой, группа слоев или монтажная область экспортируются как отдельный ресурс изображения.

Чтобы открыть диалоговое окно «Экспортировать как», выполните одно из следующих действий:

  • Выберите «Файл» > «Экспорт» > «Экспортировать как», чтобы экспортировать текущий документ Photoshop. Если ваш документ содержит монтажные области, все монтажные области в нем экспортируются через это диалоговое окно.
  • Перейдите на панель «Слои». Выберите слои, группы слоев или монтажные области, которые вы хотите экспортировать. Щелкните правой кнопкой мыши свой выбор и выберите «Экспортировать как» в контекстном меню.

Настройки диалогового окна «Экспортировать как» и предпочтения местоположения

Настройки диалогового окна «Экспортировать как»

В диалоговом окне «Экспортировать как» можно установить следующие параметры:

Формат: выберите PNG, JPG или GIF.

Размер: укажите ширину и высоту изображения. По умолчанию ширина и высота заблокированы вместе. Изменение ширины автоматически пропорционально изменяет высоту. Если вы хотите указать границы холста экспортируемого ресурса, см. раздел Размер холста.

Масштаб: выберите размер экспортируемого изображения. Этот параметр полезен для экспорта ресурсов большего или меньшего разрешения. Изменение масштаба влияет на размер изображения.

Повторная выборка: выберите метод повторной выборки. Под повторной выборкой понимается изменение объема данных изображения при изменении размеров в пикселях или разрешения изображения, как правило, при изменении размера изображения.

  • Билинейный: добавляет пиксели путем усреднения значений цвета окружающих пикселей. Этот метод дает результаты среднего качества.
  • Бикубический: более медленный, но более точный метод, основанный на анализе значений окружающих пикселей. Используя сложные вычисления, Bicubic обеспечивает более плавные тональные градации, чем методы повторной выборки Bilinear или Nearest Neighbor.
  • Бикубическое сглаживание: подходит для увеличения изображений на основе бикубической интерполяции, но предназначено для получения более плавных результатов.
  • Бикубическая резкость: подходит для уменьшения размера изображения на основе бикубической интерполяции с одновременным повышением резкости. Этот метод поддерживает детали в изображении с передискретизацией. Если Bicubic Sharper повышает резкость некоторых областей изображения, попробуйте использовать Bicubic.
  • Бикубический автоматический: автоматически выбирает метод бикубической выборки, подходящий для изображения.
  • Ближайший сосед: быстрый, но менее точный метод, который воспроизводит пиксели изображения. Этот метод предназначен для использования с иллюстрациями, содержащими несглаженные края. Он сохраняет резкие края и создает файл меньшего размера. Однако этот метод может привести к неровным эффектам, которые становятся очевидными при масштабировании изображения или выполнении нескольких манипуляций с выделенным фрагментом.
  • Сохранить детали. При изменении размера изображения этот метод придает первостепенное значение сохранению деталей и резкости изображения.

Размер холста. Если ваш объект должен занимать определенную ширину и высоту, укажите эти значения в качестве размера холста. Диалоговое окно «Экспортировать как» обновляет предварительный просмотр, чтобы центрировать изображение в этих границах. Этот параметр полезен в нескольких сценариях, таких как следующие:

  • Вы экспортируете значки разных размеров, но они должны располагаться по центру в полях размером 50 x 50 пикселей.
  • Вы экспортируете изображения баннеров, размер которых меньше или больше требуемого.

Если изображение больше размера холста, оно обрезается до значений ширины и высоты, установленных для холста. Если размер холста больше изображения, новое пространство будет заполнено в зависимости от содержимого вашего изображения. Если у вас есть фоновый слой, он будет заполнен белым цветом. Если у вас нет фонового слоя и ваши настройки формата поддерживают прозрачность, фоновый слой будет прозрачным. Если ваш файл использует цветовой режим индекса, он будет заполнен последним образцом в таблице цветов. Вы можете нажать «Сброс», чтобы вернуть значения к значениям, установленным в «Размер изображения».

Метаданные: укажите, хотите ли вы встраивать метаданные — авторские права и контактную информацию — в экспортируемые объекты.

Читайте также: