2012-06-22 28 views
9

Tôi có một thư mục với các file ghi lại ngày tháng ở định dạng:UNIX 'ls' lệnh - wildcard 'OR' hành

processAlpha20120618.txt 
processAlpha20120619.txt 
processAlpha20120620.txt 
processBeta20120618.txt 
processBeta20120619.txt 
processBeta20120620.txt 
... etc. 

Tôi muốn có một danh sách những cho những ngày cụ thể. Một cái gì đó như thế này:

ls -l *201206[19|20|21]* 

Rõ ràng ở trên không hiệu quả, nhưng bạn có thể thấy những gì tôi đang cố gắng đạt được. Tôi muốn khớp bất kỳ thứ gì mà chuỗi "201206" được theo sau bởi "19", "20" hoặc "21".

Tôi biết rằng điều này là có thể sử dụng grep hoặc tìm, tôi chỉ tự hỏi nếu nó có thể được thực hiện bằng ls.

+0

Theo câu trả lời của Ed Heal dưới đây, đây là vấn đề về trình bao. Vì vậy, đối với thông tin của bạn, tôi đang sử dụng vỏ Korn. – Nossidge

+0

Trong KSH, điều này có thể được thực hiện với 'ls -l * 201206 @ (19 | 20 | 21) *' – Nossidge

Trả lời

6

ls không làm điều này - vỏ mở rộng * v.v. sau đó chuyển chúng đến ls làm đối số.

Nhìn vào tài liệu cho vỏ - đó là gọi globbing

+1

Aha, vì vậy nó là vỏ mà tôi cần phải xem xét. Cám ơn vì cái này. – Nossidge

+0

Một dấu tích sẽ tốt đẹp. Tạo nên một Edinburgh –

+1

rất ẩm ướt "Bạn có thể chấp nhận câu trả lời trong 4 phút" :-) – Nossidge

18

Cung cấp bạn đang muốn để phù hợp với số ngày chính xác (mà nó xuất hiện bạn đang có), cách để như vậy với việc mở rộng bash là:

ls -l *201206{19,20,21}* 
+0

Tuyệt vời, cảm ơn bạn. Điều này rất gần với cách KSH thực hiện nó. – Nossidge

+0

Câu trả lời này hoạt động trên thiết bị đầu cuối mac của tôi !! – bloodyKnuckles