Что означает звездочка, обратный слеш, двоеточие и два в (* \: 2)?


14

В чем смысл следующей lsкоманды?

ls -l *\:2,*T
  • ls = список
  • -l = длинный (список)
  • *Tнаверное значит Tв конце

Но как насчет этого *\:2и запятой?

Ответы:


25

*\:2,*Tшаблон глобуса файлов для отображения Чтобы понять это, нам нужно запомнить несколько вещей:

  • : должен сбежать в оболочку, став \:
  • Имена файлов могут легко содержать запятые

Так *\:2,*Tбудет, например, соответствовать файл с именемTranscationNumber:2,EventType:XYT

РЕДАКТИРОВАТЬ

Из комментариев, необходимость (или нет) выхода из :потребности требует нескольких слов: не обязательно избегать :знака, но сам bash предлагает это при автозаполнении.


3
Спасибо, как Ойген, так и ХБрейн. Я заподозрил какой-то сложный шаблон сглаживания, но на самом деле он должен соответствовать двоеточию и запятой, о которых я не думал при работе с файлами. Теперь команда имеет смысл: перечислить все файлы электронной почты в каталогах Maildir, которые помечены как «Удаленные» (T). Btw. Число 2 означает Maildir в версии 2 (см. Wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00

11
С каких это :пор нужно бежать?
Бармар

7
:не нужно избегать Это особенное только в определенных обстоятельствах (при использовании в качестве команды), а не в шаблонах глобуса. \:Эквивалентно :, побег не имеет никакого значения.
тердон

1
@ Аарон, это не совсем запретная операция : оболочка все равно будет обрабатывать подстановки переменных, в частности, разновидность присваивания (т. unset var; : ${var:=x}; echo $var
Е.

3
@terdon & @Aaron Двоеточие :является частью значений по умолчанию для COMP_WORDBREAKSпеременной среды. В автозаполнении Bash эти символы используются в качестве разделителей слов библиотекой чтения строки, и имя файла, содержащее двоеточие, должно, конечно, быть одним словом. Отсюда и причина того, что автозаполнение bash требует экранирования двоеточия, хотя в остальном это «в основном » не специальный символ ...
HBruijn

14

Перечислите все файлы, которые соответствуют шаблону подстановочного знака *:2,*T

Там подстановочный знак *соответствует чему угодно (любое количество всех возможных символов)
:2,- это символы, которые должны присутствовать в именах файлов / каталогов.
Двоеточие :- это особый символ, который необходимо экранировать, поэтому он имеет форму \:2,.
Имена файлов / каталогов должны заканчиваться на T.

Имена файлов, которые будут соответствовать, будут

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T

1
В этом нет ничего особенного: от него не нужно убегать.
Кевин

При автозаполнении @Kevin bash автоматически удаляется двоеточие в шаблонах имен файлов / каталогов, поскольку оно включено в список COMP_WORDBREAKзначений среды, которые устанавливаются по умолчанию. - Так что это действительно не специальный специальный символ, но когда вы используете автозаполнение в командной строке и хотите / должны сопоставлять имена файлов с двоеточием, его нужно экранировать.
HBruijn

9

Как отметили другие, это будет список в длинном формате, файлы, содержащие :2и заканчивающиеся наT

Это похоже на поиск в папке Maildir файлов, которые были удалены (удалены). Однако для надежности у него должен был быть другой *в конце. Могут быть добавлены новые флаги с более поздней алфавитной позицией, и Dovecot, например, добавляет другое поле с размером файла в конце.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.