Was bedeuten Sternchen, Backslash, Doppelpunkt und zwei in (* \: 2)?

14

Was bedeutet es, einem lsBefehl zu folgen ?

ls -l *\:2,*T
  • ls = Liste
  • -l = lang (Liste)
  • *Tbedeutet wohl Tam ende

Aber was ist damit *\:2und mit dem Komma?

jugmac00
quelle

Antworten:

25

*\:2,*Tist das Glob-Muster der aufzulistenden Dateien. Um es zu verstehen, müssen wir uns an einige Dinge erinnern:

  • : muss in der Schale entkommen, werden \:
  • Dateinamen können leicht Kommas enthalten

So *\:2,*Twürde zB eine aufgerufene Datei passenTranscationNumber:2,EventType:XYT

BEARBEITEN

Aus den Kommentaren :ergibt sich die Notwendigkeit (oder auch nicht), den Bedürfnissen ein paar Worte zu entkommen : Es ist nicht unbedingt notwendig, dem :Zeichen zu entkommen , aber Bash selbst schlägt es vor, wenn es automatisch vervollständigt wird.

Eugen Rieck
quelle
3
Vielen Dank, Eugen und HBruijn. Ich vermutete ein kompliziertes Muster, aber eigentlich sollte es nur mit dem Doppelpunkt und dem Komma übereinstimmen, was mir bei der Arbeit mit Dateien nicht in den Sinn kam. Jetzt ist der Befehl absolut sinnvoll: Listen Sie alle E-Mail-Dateien in den Maildir-Verzeichnissen auf, die als "Gelöscht" (T) gekennzeichnet sind. Btw. Die Nummer 2 bedeutet Maildir in Version 2 (siehe wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00
11
Seit wann muss :geflohen werden?
Barmar
7
:muss nicht entkommen werden. Es ist nur unter bestimmten Umständen (wenn es als Befehl verwendet wird) etwas Besonderes, nicht in Glob-Mustern. Das \:ist gleichbedeutend mit :, Flucht macht keinen Unterschied.
Terdon
1
@Aaron, es ist nicht gerade no-op: Die Shell verarbeitet weiterhin Variablensubstitutionen, insbesondere die Zuweisungsvielfalt (dh das unset var; : ${var:=x}; echo $var
Festlegen von
3
@terdon & @Aaron Der Doppelpunkt :ist Teil der Standardwerte für die COMP_WORDBREAKSUmgebungsvariable. Bei der automatischen Vervollständigung von Bash werden diese Zeichen von der Bibliothek für gelesene Zeilen als Worttrennzeichen verwendet, und ein Dateiname, der einen Doppelpunkt enthält, sollte natürlich ein einzelnes Wort sein. Aus diesem Grund muss bei der automatischen Vervollständigung der Bash der Doppelpunkt mit einem
Escapezeichen versehen
14

Listen Sie alle Dateien auf, die dem Platzhaltermuster entsprechen *:2,*T

Dort *stimmt der Platzhalter mit irgendetwas überein (eine beliebige Anzahl aller möglichen Zeichen). Dies
:2,sind Zeichen, die in den Datei- / Verzeichnisnamen vorhanden sein müssen.
Der Doppelpunkt :ist ein Sonderzeichen, das maskiert werden muss, daher die Form von \:2,.
Die Datei- / Verzeichnisnamen müssen mit einem enden T.

Dateinamen, die übereinstimmen würden, wären

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
HBruijn
quelle
1
Es gibt nichts Besonderes an: Es muss nicht entkommen werden.
Kevin
Bei der automatischen Vervollständigung von @Kevin bash wird der Doppelpunkt in den Datei- / Verzeichnisnamenmustern automatisch ausgeblendet, da er in der Liste der COMP_WORDBREAKUmgebungswerte enthalten ist, die standardmäßig festgelegt werden. - Es handelt sich also in der Tat nicht um ein Sonderzeichen, aber wenn Sie die automatische Vervollständigung in der Befehlszeile verwenden und Dateinamen mit einem Doppelpunkt abgleichen möchten / müssen, muss es maskiert werden.
HBruijn
9

Wie andere angemerkt haben, enthält diese Liste im Langformat Dateien, die enthalten :2und auf endenT

Dies sieht aus wie eine Suche in einem Maildir-Ordner nach Dateien, die gelöscht (in den Papierkorb verschoben) wurden. Aus Gründen der Robustheit hätte es jedoch *am Ende eine andere geben müssen . Neue Flags mit einer späteren alphabetischen Position könnten hinzugefügt werden, und Dovecot fügt beispielsweise ein weiteres Feld mit der Dateigröße am Ende hinzu.

Engel
quelle