(* \: 2) içindeki yıldız işareti, ters eğik çizgi, iki nokta üst üste ve ikisinin anlamı nedir?


14

Aşağıdaki lskomutun anlamı nedir ?

ls -l *\:2,*T
  • ls = liste
  • -l = uzun (liste)
  • *Tmuhtemelen Tsonunda anlamına gelir

Peki ya bu *\:2ve virgül?

Yanıtlar:


25

*\:2,*Tlistelenecek dosyaların glob kalıbıdır. Bunu anlamak için birkaç şeyi hatırlamamız gerekiyor:

  • : kabuktan kaçmalı, \:
  • Dosya adları kolayca virgül içerebilir

Örneğin, *\:2,*Tşu şekilde adlandırılan bir dosyayla eşleşir:TranscationNumber:2,EventType:XYT

DÜZENLE

Yorumlardan, kaçmanın gerekliliği (veya olmaması) :birkaç kelimeye ihtiyaç duyar: İşaretten kaçmak kesinlikle gerekli değildir: , ancak bash otomatik tamamlama sırasında bunu önerir.


3
Teşekkür ederim, hem Eugen hem de HBruijn. Bazı karmaşık globbing paterninden şüphelendim, ancak aslında dosyalarla çalışırken düşünmediğim iki nokta üst üste ve virgülle eşleşmesi gerekiyor. Şimdi, komut tamamen anlamlıdır: Maildir dizinlerindeki "Silindi" (T) olarak işaretlenmiş tüm e-posta dosyalarını listeleyin. Btw. 2 sayısı, sürüm 2'deki Maildir anlamına gelir (cf wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00

11
Ne zamandan beri :kaçmalı?
Barmar

7
:kaçmak gerekmez. Glob kalıplarında değil, yalnızca belirli durumlarda (komut olarak kullanıldığında) özeldir. \:Eşdeğerdir :kaçan hiç fark etmez.
terdon

1
@Aaron, tam olarak hayır değil : kabuk hala değişken ikameleri, özellikle de atama çeşitliliğini işleyecek (yani varsayılan değerleri ayarlamak için):unset var; : ${var:=x}; echo $var
glenn jackman

3
@terdon & @Aaron İki nokta üst üste ortam değişkeni :için varsayılan değerlerin bir parçasıdır COMP_WORDBREAKS. Bash otomatik tamamlamasında, bu karakterler okuma satırı kütüphanesi tarafından kelime ayırıcılar olarak kullanılır ve iki nokta üst üste içeren bir dosya adı elbette tek bir sözcük olmalıdır. Bu nedenle, bash otomatik tamamlamanın nedeni kolonun kaçmasını gerektirir, aksi halde " çoğunlukla " özel bir karakter değildir ...
HBruijn

14

Joker karakter deseniyle eşleşen tüm dosyaları listele *:2,*T

Joker karakter *herhangi bir şeyle eşleşir (olası tüm karakterlerin herhangi bir sayısı)
:2,dosya / dizin adlarında bulunması gereken karakterlerdir.
Kolon :, kaçması gereken özel bir karakterdir, dolayısıyla biçimi \:2,.
Dosya / dizin adlarının a ile bitmesi gerekir T.

Eşleşecek dosya adları

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

1
Hakkında özel bir şey yok: Kaçışına gerek yok.
Kevin,

@Kevin bash otomatik tamamlama, COMP_WORDBREAKvarsayılan olarak ayarlanan ortam değerleri listesinde yer aldığından, otomatik olarak iki nokta üst üste dosya / dizin adı desenlerinden kaçar . - Bu gerçekten gerçek bir özel karakter değil, ancak komut satırında otomatik tamamlamayı kullandığınızda ve dosya adlarını iki nokta üst üste ile eşleştirmek istediğinizde / ihtiyaç duyduğunuzda, bu karakterden kaçmanız gerekiyor.
HBruijn

9

Diğerlerinin belirttiği gibi, bu uzun formatta, aşağıdakileri içeren :2veT

Bu, silinmiş (çöpe atılan) dosyalar için Maildir klasöründeki bir aramaya benziyor. Bununla birlikte, sağlamlık *için sonunda başka bir tane olması gerekirdi . Daha sonra alfabetik bir konuma sahip yeni bayraklar eklenebilir ve örneğin Dovecot sonunda dosya boyutuna sahip başka bir alan ekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.