2010-09-17 9 views
9

Cho phép nói rằng tôi có một thư mục với jpeg-file sau:bash filename globbing - hoạt động trên các tập tin bắt đầu với vốn

adfjhu.jpg Afgjo.jpg 
Bdfji.jpg bkdfjhru.jpg 
Cdfgj.jpg cfgir.jpg 
Ddfgjr.jpg dfgjrr.jpg 

Làm thế nào để loại bỏ hoặc liệt kê các tập tin bắt đầu với số vốn?

Điều này có thể được giải quyết với sự kết hợp của find, grepxargs.

Nhưng có thể kết hợp kiểu tập tin/mẫu hình bình thường trong bash?

cmd bên dưới không hoạt động do thực tế (theo như tôi có thể biết) LANG được đặt thành en_US và thứ tự đối chiếu.

$ ls [A-Z]*.jpg 
Afgjo.jpg Bdfji.jpg bkdfjhru.jpg Cdfgj.jpg cfgir.jpg Ddfgjr.jpg dfgjrr.jpg 

này loại công trình

$ ls +(A|B|C|D)*.jpg 
Afgjo.jpg Bdfji.jpg Cdfgj.jpg Ddfgjr.jpg 

Nhưng tôi không muốn làm điều này cho tất cả các ký tự A-Z cho một giải pháp chung!

Vậy điều này có khả thi không?

cổ vũ // Fredrik

+1

Điều thú vị đủ, trên hộp Linux của tôi với LANG thiết lập để "en_US.UTF-8" "ls [AZ] *" mang đến cho tất cả những trường hợp thấp hơn là tốt, nhưng trên Macintosh của tôi với LANG được đặt thành "en_US.UTF-8", "ls [AZ] *" chỉ cung cấp tên trường hợp uppper. Trên cả hai hộp là LC_COLLATE, vì vậy tôi không biết sự khác biệt là gì. –

Trả lời

5

bạn nên thiết lập miền địa phương của bạn để C (hoặc POSIX) ngôn ngữ.

$ LC_ALL=C ls [A-Z]*.jpg 

hoặc

$ LC_ALL=C ls [[:upper:]]*.jpg 

đọc vào đây để biết thêm thông tin: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

+0

Argh! Tôi đã thử một bài trước khi đăng bài nhưng 'LC_ALL = C ls [A-Z] *. Jpg' liệt kê tất cả các tệp cho tôi! POSIX thingie [: upper:] hoạt động! Cảm ơn! ;-) –

2

Sử dụng grep:

ls | grep -e ^[A-Z] 

Nếu bạn muốn làm cho hơn sử dụng một vòng lặp for:

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
5

Sử dụng một biểu thức khung với một lớp nhân vật:

ls -l [[:upper:]]* 

Xem man 7 regex cho một danh sách các lớp nhân vật và các thông tin khác.

Từ trang đó:

Trong một biểu thức khung, tên của một lớp nhân vật kèm theo trong '[:' và ':]' là viết tắt của danh sách của tất cả các nhân vật thuộc lớp đó. tên lớp nhân vật tiêu chuẩn là:

alnum digit punct 
alpha graph space 
blank lower upper 
cntrl print xdigit