Qual è il significato di asterisco, barra rovesciata, due punti e due in (* \: 2)?


14

Qual è il significato del seguente lscomando?

ls -l *\:2,*T
  • ls = elenco
  • -l = lungo (elenco)
  • *Tprobabilmente significa Talla fine

Ma che dire di questo *\:2e della virgola?

Risposte:


25

*\:2,*Tè il modello glob dei file da elencare. Per capirlo, dobbiamo ricordare alcune cose:

  • : deve essere evaso nel guscio, diventando \:
  • I nomi dei file possono contenere facilmente virgole

Quindi *\:2,*T, ad esempio, corrisponderebbe a un file chiamatoTranscationNumber:2,EventType:XYT

MODIFICARE

Dai commenti, la necessità (o meno) di sfuggire ai :bisogni con poche parole: non è strettamente necessario sfuggire al :segno, ma bash stesso lo suggerisce durante il completamento automatico.


3
Grazie, sia Eugen che HBruijn. Sospettavo un complicato modello di globbing, ma in realtà dovrebbe corrispondere solo ai due punti e alla virgola, a cui non pensavo quando lavoravo con i file. Ora, il comando ha perfettamente senso: elenca tutti i file di posta elettronica nelle directory di Maildir, che sono contrassegnati come "Eliminati" (T). Btw. Il numero 2 indica Maildir nella versione 2 (vedi wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00,

11
Da quando :deve essere evaso?
Barmar,

7
:non ha bisogno di essere evaso. È speciale solo in circostanze specifiche (se usato come comando), non in modelli glob. Il \:equivale a :, fuga non fa differenza.
terdon,

1
@Aaron, non è esattamente no-op: la shell elaborerà comunque le sostituzioni variabili, in particolare la varietà di assegnazione (ovvero per impostare i valori predefiniti):unset var; : ${var:=x}; echo $var
glenn jackman

3
@terdon & @Aaron I due punti :fanno parte dei valori predefiniti per la COMP_WORDBREAKSvariabile di ambiente. Nel completamento automatico di Bash questi caratteri vengono utilizzati come separatori di parole dalla libreria di righe di lettura e un nome file contenente due punti dovrebbe ovviamente essere una singola parola. Da qui la ragione per cui il completamento automatico della bash richiede la fuga dei due punti, anche se per il resto non è "per lo più " un carattere speciale ...
HBruijn

14

Elencare tutti i file che corrispondono al modello jolly *:2,*T

Lì il carattere jolly *corrisponde a qualsiasi cosa (qualsiasi numero di tutti i possibili caratteri)
:2,sono i caratteri che devono essere presenti nei nomi di file / directory.
Il colon :è un personaggio speciale che deve essere evaso, da cui la forma di \:2,.
I nomi di file / directory devono terminare con a T.

I nomi dei file che corrisponderebbero sarebbero

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

1
Non c'è niente di speciale in: non ha bisogno di essere evaso.
Kevin,

Il completamento automatico di @Kevin bash sfugge automaticamente ai due punti nei modelli di nome file / directory, poiché è incluso nell'elenco dei COMP_WORDBREAKvalori di ambiente che vengono impostati per impostazione predefinita. - Quindi non è in effetti un vero carattere speciale, ma quando si utilizza il completamento automatico sulla riga di comando e si desidera / è necessario abbinare i nomi dei file con i due punti, è necessario eseguire l'escape.
HBruijn,

9

Come altri hanno già notato, questo verrà elencato in formato lungo, file contenenti :2e che termina conT

Sembra una ricerca in una cartella Maildir per i file che sono stati eliminati (cestinati). Tuttavia, per robustezza avrebbe dovuto averne un altro *alla fine. È possibile aggiungere nuovi flag con una posizione alfabetica successiva e Dovecot, ad esempio, aggiunge un altro campo con le dimensioni del file alla fine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.