Kabuk joker karakterlerinde OR kalıplarını kullanma


52

Dir'in içeriği

$ ls -lrt
total 0
-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 night.txt
-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 noon.txt
-rw-r--r-- 1 user1 admin 38 Oct  8 12:31 day.txt

Belirtilen dosya adında bir kelimeye sahip dosyaların detaylarını listelemek istiyorum.

Örnek :

$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found

Beklenen çıktı

-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 night.txt
-rw-r--r-- 1 user1 admin 38 Oct  8 12:31 day.txt

İle regex nasıl kullanılacağı farklı 2 farklı partterns, eşleştirme dosyaları veya kısaca dışarı listelemek için nasıl ls, yapabilirim böylece ORdosya adı parçaları.

Orijinal senaryoda, dizinde çok sayıda dosya var, sormak için davayı kısalttı.

Yanıtlar:


65

İstediğinizi yapabilmek için genişletilmiş globbing etkinliğine bile ihtiyacınız yok. Bu bash olarak çalışacak:

ls {day*,night*}

7
Hayır değil: touch day.txt; touch night.txt; ls {*day,night*}sonuçlarıls: *day: No such file or directory
Matteo

1
Orijinal posterin metnini uyarlıyordum; Bunun net olduğunu düşündüm. nefes . Metin güncellendi. Elbette mekanizmanın çalıştığını görebiliyor musunuz?
saat

7
Ya da muhtemelen *{day,night}*OP'nin istediği şeye daha yakın.
derobert

25

lsDosya adını filtrelemek için bir seçenek yoktur , ancak kabukların çoğunda globbing uzantısı varman bash /Pattern Matching

ksh

ls -lrtd -- *@(day|night)*

zsh

setopt extendedglob
ls -lrtd -- *(day|night)*

veya:

setopt kshglob
ls -lrtd -- *@(day|night)*

darbe

shopt -s extglob
ls -lrtd -- *@(day|night)*

Bu üç kabuğun herhangi birinde bunu yapabilirsiniz, ancak vakalardan birinin herhangi bir dosyayla eşleşmemesi durumunda, bu modelin genişlemeyeceğini unutmayın (ör. *day* night1.txt othernight.txtİçeren dosya adı yoksa day; görün man bash /EXPANSIONveya /Brace Expansionözel olarak):

ls -lrtd -- *{day,night}*

Yapabileceğiniz herhangi bir kabukta:

ls -lrtd -- *day* *night*

Zsh'de, hiç dosya dayveya nightdosya yoksa , son iki komut başarısız olur; nonomatchveya csh_null_globseçeneğini ayarlayın veya (N)önlemek için her düzenden sonra ekleyin .


1
Ne hakkında *{day,night}*? Düzenlerdim ama hangi mermilerin desteklediğini bilmiyorum?
Random832

@ Random832 çalışıyor bash, kshve zsh(hiçbiri ihtiyacı globbing genişletilmiş), ancak sh- ancak Nahuel'in en son "Tüm kabuklar" örneği de çalışır sh.
Izkata

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.