Quelle est la signification de l'astérisque, de la barre oblique inverse, des deux points et de deux dans (* \: 2)?

14

Quelle est la signification de la lscommande suivante ?

ls -l *\:2,*T
  • ls = liste
  • -l = long (liste)
  • *Tsignifie probablement Tà la fin

Mais qu'en est-il de cela *\:2et de la virgule?

jugmac00
la source

Réponses:

25

*\:2,*Test le modèle global des fichiers à répertorier. Pour le comprendre, nous devons nous souvenir de quelques choses:

  • : doit être échappé dans la coquille, devenant \:
  • Les noms de fichiers peuvent facilement contenir des virgules

Ainsi *\:2,*T, par exemple, correspondrait à un fichier appeléTranscationNumber:2,EventType:XYT

ÉDITER

D'après les commentaires, la nécessité (ou non) d'échapper aux :besoins en quelques mots: il n'est pas strictement nécessaire d'échapper au :signe, mais bash le suggère lui-même lors de la saisie semi-automatique.

Eugen Rieck
la source
3
Merci, Eugen et HBruijn. Je soupçonnais un schéma de globalisation compliqué, mais en fait, il devrait simplement correspondre aux deux points et à la virgule, auxquels je ne pensais pas lorsque je travaillais avec des fichiers. Maintenant, la commande est tout à fait logique: répertoriez tous les fichiers de courrier électronique dans les répertoires Maildir, qui sont marqués comme «Supprimés» (T). Btw. Le nombre 2 signifie Maildir dans la version 2 (cf. wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00
11
Depuis quand faut :-il s'échapper?
Barmar
7
:n'a pas besoin d'être échappé. Il n'est spécial que dans des circonstances spécifiques (lorsqu'il est utilisé comme une commande), pas dans les modèles glob. L' \:équivalent de :, s'échapper ne fait aucune différence.
terdon
1
@Aaron, ce n'est pas exactement non-op: le shell traitera toujours les substitutions de variables, en particulier la variété d'affectation (c'est-à-dire pour définir les valeurs par défaut):unset var; : ${var:=x}; echo $var
glenn jackman
3
@terdon & @Aaron Le signe deux :- points fait partie des valeurs par défaut de la COMP_WORDBREAKSvariable d'environnement. Dans la saisie semi-automatique de Bash, ces caractères sont utilisés comme séparateurs de mots par la bibliothèque de lignes de lecture et un nom de fichier contenant deux points doit bien sûr être un seul mot. D'où la raison pour laquelle l'autocomplétion bash nécessite que le côlon soit échappé, bien qu'autrement ce ne soit « surtout » pas un caractère spécial ...
HBruijn
14

Liste tous les fichiers qui correspondent au modèle générique *:2,*T

Là, le caractère générique *correspond à tout (n'importe quel nombre de tous les caractères possibles)
:2,sont des caractères qui doivent être présents dans les noms de fichier / répertoire.
Le deux :- points est un caractère spécial qui doit être échappé, d'où la forme de \:2,.
Les noms de fichiers / répertoires doivent se terminer par un T.

Les noms de fichiers qui correspondraient seraient

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
HBruijn
la source
1
Il n'y a rien de spécial: il n'a pas besoin d'être échappé.
Kevin
La complétion automatique @Kevin bash échappe automatiquement les deux points dans les modèles de nom de fichier / répertoire, car elle est incluse dans la liste des COMP_WORDBREAKvaleurs d'environnement définies par défaut. - Il ne s'agit donc pas d'un caractère spécial réel, mais lorsque vous utilisez la saisie semi-automatique sur la ligne de commande et que vous souhaitez / devez faire correspondre les noms de fichiers avec deux points, il doit être échappé.
HBruijn
9

Comme d'autres l'ont fait remarquer, cela répertoriera au format long, les fichiers contenant :2et se terminant parT

Cela ressemble à une recherche dans un dossier Maildir pour les fichiers qui ont été supprimés (mis à la corbeille). Cependant, pour la robustesse, il aurait dû en avoir un autre *à la fin. De nouveaux drapeaux avec une position alphabétique ultérieure pourraient être ajoutés, et Dovecot par exemple ajoute un autre champ avec la taille du fichier à la fin.

Ange
la source