Làm thế nào để tôi phủ nhận chính xác các biểu thức toàn cầu zsh?


18

Tôi muốn liệt kê tất cả các tệp nhưng những tệp kết thúc bằng owp: Do đó tôi đã thử:

  ls -l *.(^owp)
  zsh: unknown sort specifier
  ls -l *(^owp) 
  zsh: unknown sort specifier
  ls -l *[^o][^w][^p] # does not work either, missing some files

không ai làm việc Làm thế nào để tôi làm điều đó một cách chính xác? .Sshshrc của tôi đã "thiết lập Extendedglob".

Câu trả lời:


27

Hãy thử một trong hai:

ls -l ^*.owp

(tức là phù hợp với bất cứ điều gì ngoại trừ mẫu *.owp)

hoặc là:

ls -l *~*.owp

(tức là khớp bất cứ thứ gì khớp với mẫu *nhưng không khớp *.owp)

Xem man zshexpn=> FILENAME GENERATION=> Glob Operatorsđể biết thêm về điều này.


Được áp dụng ()trong các mẫu toàn cầu là dành cho vòng loại toàn cầu, trong khi bạn muốn có một nhà điều hành toàn cầu.

Cái gì *.(^owp)là:

  1. Khớp tất cả các tên tệp kết thúc bằng dấu chấm
  2. nếu chúng không có ống (^p), và
  3. sắp xếp các kết quả khớp (o)theo " w" => "specifier sort"

Xem man zshexpn=> FILENAME GENERATION=> Glob Qualifiersđể biết thêm về điều này.


1
^ *. owp đã làm công việc. whooa, vì những gì *. (^ owp) thực sự làm :)
toán học

9
Đối với bất kỳ ai không thể làm điều này hoạt động, bạn cần đặt extendedglobtùy chọn trong Zsh.
DBedrenko

7
@DBedrenko: cảm ơn! Lưu ý: thực hiện quasetopt extendedglob
Thomas M

1
Tôi thấy điều này hữu ích như một bản tóm tắt nhanh chóng cho bất cứ ai quan tâm đến vòng loại toàn cầu.
phường
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.