Tôi đang chạy zsh trên Linux setopt extended_glob ksh_glob glob_dots
. Tôi đang tìm kiếm một cái gì đó dễ dàng để gõ trên dòng lệnh, không có yêu cầu về tính di động. Tôi đang xem một cây mã nguồn, không có tên tập tin kỳ lạ của người Viking (ví dụ: không có \
tên tệp, không có tên tệp bắt đầu bằng -
).
Một trong các lệnh sau sẽ in danh sách các thư mục con của thư mục hiện tại theo cách đệ quy:
find -type d
print -l **/*/
Đây thực sự là một kiểm tra svn:
$ find -type d
./.deps
./.svn
./.svn/text-base
./.svn/prop-base
./.svn/tmp
./.svn/tmp/text-base
./.svn/tmp/prop-base
./.svn/tmp/props
./.svn/props
./lib/.svn
./lib/.svn/text-base
./lib/.svn/prop-base
./lib/.svn/tmp
./lib/.svn/tmp/text-base
./lib/.svn/tmp/prop-base
./lib/.svn/tmp/props
./src/.svn
./src/.svn/text-base
./src/.svn/prop-base
./src/.svn/tmp
./src/.svn/tmp/text-base
./src/.svn/tmp/prop-base
./src/.svn/tmp/props
Tôi muốn loại trừ các .svn
thư mục và thư mục con của chúng có trong mọi thư mục. Thật dễ dàng với find
:
find -type d -name .svn -prune -o -print
Tôi có thể làm điều này với một zsh toàn cầu ngắn? Bỏ qua các tệp chấm đến gần (tôi cần làm rõ ràng vì tôi đã glob_dots
đặt):
print -l **/*(/^D)
Nhưng điều này không thỏa đáng vì nó ẩn .deps
thư mục mà tôi muốn xem. Tôi có thể lọc ra các đường dẫn chứa .svn
:
print -l **/*~(*/|).svn(|/*)(/)
Nhưng nó chỉ ngắn hơn find
(vì vậy tôi đang sử dụng zsh để làm gì?). Tôi có thể rút ngắn nó xuống print -l **/*~*.svn*(/)
, nhưng nó cũng lọc ra các thư mục được gọi hello.svn
. Hơn nữa, zsh đi qua các .svn
thư mục, một chút chậm trên NFS hoặc Cygwin.
Có cách nào thuận tiện (như dễ gõ) để loại trừ một tên thư mục cụ thể (hoặc thậm chí tốt hơn: một mẫu tùy ý) trong một thế giới đệ quy không?
printf '%s\n' **/*
hayprint -rl -- **/*
?