Подстановки имен файлов

06.03.2018

Теги: BashCLILinuxКомандаФайлШаблон

Когда вы набираете команду типа ls *.txt и нажимаете Enter, задача поиска файлов, совпадающих с критерием *.txt решается не только командой ls, но и самой оболочкой. Здесь требуется небольшое объяснение о том, как командная строка интерпретируется в shell. При вводе:

$ ls *.txt
readme.txt recipes.txt

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

$ ls readme.txt recipes.txt

что дает результат выполнения:

readme.txt recipes.txt

Другие специальные символы:

  • ? — соответствует одному и только одному символу, независимо от того чем этот символ является;
  • […] — соответствует одному символу, найденному в скобках. Символы можно указать как диапазон символов (то есть 1-9) или дискретные значения, или даже и то и другое. Пример: [a-zBE5-7] будет соответствовать всем символам между a и z, B, E, 5, 6 или 7;
  • [!…] — соответствует любому символу, не находящемуся в скобках. Например, [!a-z], будет соответствовать любому символу который не является буквой в нижнем регистре;
  • {abc,def} — соответствует abc или def, где abc и def также шаблоны подстановки; это означает, что можно написать {[0-9]*,[xyz]} например.
  • Несколько примеров:

    • /etc/*conf — все файлы в каталоге /etc с окончаниями в именах conf. Это может соответствовать /etc/inetd.conf, /etc/conf.linuxconf, а также /etc/conf если такой файл существует. Не надо забывать, что * может соответствовать пустой строке.
    • image/{cars,space[0-9]}/*.jpg — все файлы, заканчивающиеся на .jpg в каталогах image/cars, image/space0, …, image/space9, если эти каталоги существуют.
    • /usr/share/doc/*/README — все файлы с именем README во всех каталогах /usr/share/doc непосредственно. Это будет соответствовать /usr/share/doc/mandrake/README, например, но не соответствовать /usr/share/doc/myprog/doc/README.
    • *[!a-z] — все файлы, имена которых не заканчиваются буквой в нижнем регистре в текущем каталоге.

    Дополнительно

    Поиск: Bash • CLI • Linux • Команда • Файл • Шаблон

    Каталог оборудования
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Производители
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Функциональные группы
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.