Qual é o significado de asterisco, barra invertida, dois pontos e dois em (* \: 2)?

14

Qual é o significado do seguinte lscomando?

ls -l *\:2,*T
  • ls = list
  • -l = longo (lista)
  • *Tprovavelmente significa Tno final

Mas *\:2e a vírgula?

jugmac00
fonte

Respostas:

25

*\:2,*Té o padrão global de arquivos a serem listados. Para entender, precisamos lembrar de algumas coisas:

  • : tem que ser escapado na concha, tornando-se \:
  • Os nomes de arquivos podem conter vírgulas facilmente

Por *\:2,*Texemplo, corresponderia a um arquivo chamadoTranscationNumber:2,EventType:XYT

EDITAR

A partir dos comentários, a necessidade (ou não) de escapar das :necessidades precisa de algumas palavras: não é estritamente necessário escapar do :sinal, mas o próprio bash sugere quando o preenchimento automático.

Eugen Rieck
fonte
3
Obrigado, Eugen e HBruijn. Eu suspeitava de algum padrão complicado de globbing, mas na verdade deveria corresponder apenas ao cólon e à vírgula, no qual não pensei ao trabalhar com arquivos. Agora, o comando faz todo sentido: liste todos os arquivos de email nos diretórios Maildir, marcados como "Excluídos" (T). Btw. O número 2 significa Maildir na versão 2 (cf wiki2.dovecot.org/MailboxFormat/Maildir ).
precisa saber é o seguinte
11
Desde quando é :preciso escapar?
Barmar
7
:não precisa ser escapado. É especial apenas em circunstâncias específicas (quando usado como um comando), não em padrões glob. O \:equivalente a :, escapar não faz diferença.
terdon
1
@ Aaron, não é exatamente não-op: o shell ainda processará substituições de variáveis, particularmente a variedade de atribuições (ou seja, para definir valores padrão):unset var; : ${var:=x}; echo $var
glenn jackman
3
@terdon & @Aaron Os dois pontos :fazem parte dos valores padrão da COMP_WORDBREAKSvariável de ambiente. No preenchimento automático do Bash, esses caracteres são usados ​​como separadores de palavras pela biblioteca de linhas de leitura e um nome de arquivo contendo dois pontos deve, obviamente, ser uma única palavra. Daí a razão pela qual o preenchimento automático do bash exige que o cólon seja escapado, embora, caso contrário, "não seja" principalmente um caractere especial ...
HBruijn
14

Listar todos os arquivos que correspondem ao padrão curinga *:2,*T

Lá, o curinga *corresponde a qualquer coisa (qualquer número de todos os caracteres possíveis)
:2,são caracteres que precisam estar presentes nos nomes de arquivo / diretório.
O cólon :é um caractere especial que precisa ser escapado, daí a forma de \:2,.
Os nomes de arquivo / diretório precisam terminar com a T.

Os nomes de arquivos que corresponderiam seriam

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
HBruijn
fonte
1
Não há nada de especial: não precisa ser escapado.
Kevin
O preenchimento automático do @Kevin bash escapa automaticamente os dois pontos nos padrões de nome de arquivo / diretório, porque está incluído na lista de COMP_WORDBREAKvalores de ambiente que são definidos por padrão. - Portanto, não é realmente um caractere especial, mas quando você usa o preenchimento automático na linha de comando e deseja / precisa corresponder nomes de arquivos com dois pontos, ele precisa ser escapado.
precisa saber é o seguinte
9

Como outros observaram, isso listará em formato longo, arquivos contendo :2 e terminando emT

Parece uma pesquisa em uma pasta do Maildir para arquivos que foram excluídos (lixeira). No entanto, por robustez, deveria ter tido outro* no final. Novos sinalizadores com uma posição alfabética posterior podem ser adicionados, e o Dovecot, por exemplo, adiciona outro campo com o tamanho do arquivo no final.

Anjo
fonte