Co oznacza gwiazdka, ukośnik odwrotny, dwukropek i dwa w (* \: 2)?

14

Jakie jest znaczenie następującego lspolecenia?

ls -l *\:2,*T
  • ls = lista
  • -l = długi (lista)
  • *Tprawdopodobnie oznacza Tna końcu

Ale co z tym *\:2i przecinkiem?

jugmac00
źródło

Odpowiedzi:

25

*\:2,*Tto globalny wzorzec plików do wyświetlenia. Aby to zrozumieć, musimy pamiętać o kilku rzeczach:

  • : musi uciec w skorupce, stając się \:
  • Nazwy plików mogą łatwo zawierać przecinki

Więc *\:2,*Tnp. Pasuje do pliku o nazwieTranscationNumber:2,EventType:XYT

EDYTOWAĆ

Z komentarzy :wynika , że konieczność ucieczki przed potrzebami (lub nie) wymaga kilku słów: nie jest absolutnie konieczne unikanie :znaku, ale sama bash sugeruje to podczas autouzupełniania.

Eugen Rieck
źródło
3
Dziękuję, zarówno Eugenowi, jak i HBruijnowi. Podejrzewałem jakiś skomplikowany wzór globowania, ale tak naprawdę powinien on pasować do dwukropka i przecinka, o czym nie myślałem podczas pracy z plikami. Teraz to polecenie ma sens: wyświetl wszystkie pliki e-mail w katalogach Maildir, które są oznaczone jako „Usunięte” (T). Btw. Liczba 2 oznacza Maildir w wersji 2 (por. Wiki2.dovecot.org/MailboxFormat/Maildir ).
jugmac00,
11
Od kiedy :trzeba uciekać?
Barmar
7
:nie trzeba uciekać. Jest to wyjątkowe tylko w określonych okolicznościach (gdy jest używane jako polecenie), a nie we wzorcach globów. \:Jest równoważna :, uciekając nie robi różnicy.
terdon
1
@Aaron, to nie jest dokładnie brak: powłoka nadal będzie przetwarzać podstawienia zmiennych, szczególnie różnorodność przypisań (tj. Aby ustawić wartości domyślne):unset var; : ${var:=x}; echo $var
glenn jackman
3
@terdon & @Aaron Dwukropek :jest częścią wartości domyślnych dla COMP_WORDBREAKSzmiennej środowiskowej. W autouzupełnianiu Bash znaki te są używane jako separatory słów przez bibliotekę linii odczytu, a nazwa pliku zawierająca dwukropek powinna oczywiście być pojedynczym słowem. Stąd powód, dla którego autouzupełnianie bash wymaga ucieczki jelita grubego, chociaż w przeciwnym razie nie jest to „ szczególny ” znak specjalny ...
HBruijn
14

*:2,*T

Tam symbol wieloznaczny *pasuje do wszystkiego (dowolna liczba wszystkich możliwych znaków)
:2,to znaki, które muszą znajdować się w nazwach plików / katalogów.
Dwukropek :jest specjalną postacią, którą należy uciec, stąd forma \:2,.
Nazwy plików / katalogów muszą kończyć się na T.

Nazwy plików, które pasowałyby do siebie, to

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
HBruijn
źródło
1
Nie ma w tym nic specjalnego: nie trzeba uciekać.
Kevin,
Automatyczne uzupełnianie @Kevin bash automatycznie unika dwukropka we wzorach nazw plików / katalogów, ponieważ znajduje się na liście COMP_WORDBREAKwartości środowiska ustawianych domyślnie. - Tak więc nie jest to w rzeczywistości rzeczywisty znak specjalny, ale jeśli używasz autouzupełniania w wierszu poleceń i chcesz / musisz dopasować nazwy plików do dwukropka, musisz uciec.
HBruijn,
9

Jak zauważyli inni, będzie to wyświetlać w długim formacie, pliki zawierające :2i kończące się naT

Wygląda to na wyszukiwanie w folderze Maildir plików, które zostały usunięte (zniszczone). Jednak jeśli chodzi o solidność, na końcu powinna była mieć inną *. Można dodać nowe flagi z późniejszą pozycją alfabetyczną, a na przykład Dovecot dodaje kolejne pole z rozmiarem pliku na końcu.

Anioł
źródło