¿Cuál es el significado de asterisco, barra diagonal inversa, dos puntos y dos en (* \: 2)?

14

¿Cuál es el significado de seguir el lscomando?

ls -l *\:2,*T
  • ls = lista
  • -l = largo (lista)
  • *Tprobablemente significa Tal final

¿Pero qué hay de eso *\:2y la coma?

jugmac00
fuente

Respuestas:

25

*\:2,*Tes el patrón global de archivos a listar. Para entenderlo, debemos recordar algunas cosas:

  • : tiene que escapar en el caparazón, convirtiéndose \:
  • Los nombres de archivo pueden contener comas fácilmente

Entonces *\:2,*T, por ejemplo, coincidiría con un archivo llamadoTranscationNumber:2,EventType:XYT

EDITAR

A partir de los comentarios, la necesidad (o no) de escapar de las :necesidades requiere algunas palabras: no es estrictamente necesario escapar del :signo, pero bash lo sugiere cuando se completa automáticamente.

Eugen Rieck
fuente
3
Gracias, tanto Eugen como HBruijn. Sospeché un patrón complicado de englosamiento, pero en realidad debería coincidir con el colon y la coma, que no pensé al trabajar con archivos. Ahora, el comando tiene mucho sentido: enumere todos los archivos de correo electrónico en los directorios de Maildir, que están marcados como "Eliminados" (T). Por cierto. El número 2 significa Maildir en la versión 2 (cf wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00
11
¿Desde cuándo :tiene que escapar?
Barmar
77
:No necesita ser escapado. Solo es especial en circunstancias específicas (cuando se usa como comando), no en patrones globales. El \:equivalente a :, escapar no hace ninguna diferencia.
terdon
1
@ Aaron, no es exactamente no operativo : el shell seguirá procesando sustituciones variables, particularmente la variedad de asignación (es decir, para establecer valores predeterminados):unset var; : ${var:=x}; echo $var
glenn jackman
3
@terdon & @Aaron Los dos puntos :son parte de los valores predeterminados para la COMP_WORDBREAKSvariable de entorno. En el autocompletado de Bash, la biblioteca de líneas de lectura utiliza esos caracteres como separadores de palabras y, por supuesto, un nombre de archivo que contenga dos puntos debería ser una sola palabra. De ahí la razón de que la terminación automática fiesta requiere los dos puntos que se escaparon, aunque por lo demás es " sobre todo " no es un carácter especial ...
HBruijn
14

Lista todos los archivos que coinciden con el patrón comodín *:2,*T

Allí el comodín *coincide con cualquier cosa (cualquier número de todos los caracteres posibles)
:2,son caracteres que deben estar presentes en los nombres de archivo / directorio.
El colon :es un carácter especial que necesita ser escapado, de ahí la forma de \:2,.
Los nombres de archivo / directorio deben terminar con a T.

Los nombres de archivo que coincidirían serían

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
HBruijn
fuente
1
No tiene nada de especial: no es necesario escapar.
Kevin
La finalización automática de @Kevin bash escapa automáticamente de los dos puntos en los patrones de nombre de archivo / directorio, porque está incluida en la lista de COMP_WORDBREAKvalores de entorno que se configuran de forma predeterminada. - Por lo tanto, en realidad no es un carácter especial real, pero cuando usa el autocompletado en la línea de comandos y desea / necesita hacer coincidir los nombres de archivo con dos puntos, es necesario escapar.
HBruijn
9

Como otros han señalado, esto mostrará una lista en formato largo, los archivos que contienen :2y terminan enT

Esto parece una búsqueda en una carpeta de Maildir para archivos que fueron eliminados (basura). Sin embargo, por robustez, debería haber tenido otro *al final. Se podrían agregar nuevas banderas con una posición alfabética posterior, y Dovecot, por ejemplo, agrega otro campo con el tamaño del archivo al final.

Ángel
fuente