GoGPT Best VPN GoSearch

Biểu tượng yêu thích OnWorks

zsh-những người yêu thích - Trực tuyến trên đám mây

Chạy những người yêu thích zsh trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh zsh-loves có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


zsh-những người yêu thích - mẹo, thủ thuật và ví dụ cho Z shell

SYNOPSIS


Chỉ cần đọc nó. ;-)

TỔNG QUAN


Bất cứ khi nào chúng tôi xem hướng dẫn sử dụng zsh, chúng tôi tự hỏi tại sao không có ví dụ hoặc những
những thứ trong (vỏ) cuộc sống. Zsh chứa nhiều tính năng, nhưng không có trang nào có một số
ví dụ (như procmailex(5)). Đó là lý do tại sao chúng tôi viết trang này.

Hầu hết các thủ thuật và oneliner đến từ danh sách gửi thư zsh-users, zsh-worker, google,
nhóm tin tức và từ chính chúng tôi. Xem phần LIÊN KẾT để biết thêm chi tiết.

Lưu ý: Trang này (những người yêu thích zsh(1)) là không một phần chính thức của Z shell! Nó chỉ là một
cho vui - manpage;) Đối với nhận xét, báo cáo lỗi và phản hồi, hãy xem nhanh
phần GIỎI.

VỎ VỎ


Phần này cung cấp một số ví dụ về những thứ thường cần có của shellcript. Chú ý rằng bạn
không nên sử dụng nếu không hầu hết các ví dụ sẽ không hoạt động. Các tùy chọn phân tích cú pháp trong shellcripts. Thí dụ
lấy từ ZWS bởi Adam Chodorowski (http://www.chodorowski.com/projects/zws/):

parse_options ()
{
o_port = (- tr 9999)
o_root = (- r WWW)
o_log = (- d ZWS.log)

zparseopts -K - p: = o_port r: = o_root l: = o_log h = o_help
nếu [[$? ! = 0 || "$ o_help"! = ""]]; sau đó
echo Cách sử dụng: $ (basename "$ 0") "[-p PORT] [-r DIRECTORY]"
thoát 1
fi

port = $ o_port [2]
root = $ o_root [2]
log = $ o_log [2]

if [[$ root [1]! = '/']]; then root = "$ PWD / $ root"; fi
}
# bây giờ sử dụng hàm:
parse_options $ *

VÍ DỤ


Các phần phụ có sẵn là bí danh, Hoàn thành, Chưa phân loại / Khác ví dụ, (Đệ quy)
Đánh bóng - Các ví dụ, Bổ ngữ sử dụng, Chuyển hướng-Ví dụ, ZMV-Ví dụ
Mô-đun-Ví dụ.

bí danh
Bí danh hậu tố được hỗ trợ trong zsh kể từ phiên bản 4.2.0. Vài ví dụ:

bí danh -s tex = vim
bí danh -s html = w3m
bí danh -s org = w3m

Bây giờ nhấn phím quay lại sau khi nhập foobar.tex bắt đầu vim với foobar.tex. Gọi một
html-file chạy trình duyệt w3m. www.zsh.org và nhấn enter sẽ bắt đầu w3m với đối số
www.zsh.org. Bí danh chung có thể được sử dụng ở bất kỳ đâu trong dòng lệnh. Thí dụ:

$ bí danh -g C = '| wc -l '
bí danh $ grep ~ / .zsh /* NS
443

Một số bí danh toàn cầu hữu ích hơn hoặc ít hơn (chọn xem chúng có hữu ích hay không cho bạn trên
của riêng bạn):

bí danh -g ... = '../ ..'
bí danh -g .... = '../../ ..'
bí danh -g ..... = '../../../ ..'
bí danh -g CA = "2> & 1 | cat -A"
bí danh -g C = '| wc -l '
bí danh -g D = "DISPLAY =: 0.0"
bí danh -g DN = / dev / null
bí danh -g ED = "xuất DISPLAY =: 0.0"
bí danh -g EG = '| & egrep'
bí danh -g EH = '| & head'
bí danh -g EL = '| & ít hơn'
bí danh -g ELS = '| & ít hơn -S'
bí danh -g ETL = '| & tail -20'
bí danh -g ET = '| & tail'
bí danh -g F = '| fmt - '
bí danh -g G = '| egrep '
bí danh -g H = '| cái đầu'
bí danh -g HL = '| & head -20'
bí danh -g Sk = "* ~ (*. bz2 | * .gz | * .tgz | * .zip | * .z)"
bí danh -g LL = "2> & 1 | ít hơn"
bí danh -g L = "| ít hơn"
bí danh -g LS = '| ít hơn -S '
bí danh -g MM = '| phần lớn'
bí danh -g M = '| hơn'
bí danh -g NE = "2> / dev / null"
bí danh -g NS = '| sắp xếp -n '
bí danh -g NUL = "> / dev / null 2> & 1"
bí danh -g PIPE = '|'
bí danh -g R = '> /c/aaa/tee.txt'
bí danh -g RNS = '| sắp xếp -nr '
bí danh -g S = '| loại'
bí danh -g TL = '| đuôi -20 '
bí danh -g T = '| đuôi'
bí danh -g US = '| sắp xếp -u '
bí danh -g VM = / var / log / messages
bí danh -g X0G = '| xargs -0 egrep '
bí danh -g X0 = '| xargs -0 '
bí danh -g XG = '| xargs egrep '
bí danh -g X = '| xargs '

HOÀN THÀNH
Xem thêm người đàn ông 1 zshcompctl zshcompsys zshcompwid. zshcompctl là kiểu cũ của zsh
hoàn thành có thể lập trình, zshcompsys là hệ thống hoàn thành mới, zshcompwid là zsh
các vật dụng hoàn thành.

Một số chức năng, như _apt và _dpkg, rất chậm. Bạn có thể sử dụng bộ nhớ cache để proxy
danh sách kết quả (như danh sách các gói debian có sẵn) Sử dụng bộ đệm ẩn:

zstyle ': complete: *' use-cache on
zstyle ': complete: *' cache-path ~ / .zsh / bộ nhớ cache

Ngăn không cho các tệp / thư mục CVS ​​được hoàn thành:

zstyle ': complete: * :( all- |) tệp' mẫu bị bỏ qua '(| * /) CVS'
zstyle ': hoàn thành: *: cd: *' mẫu bị bỏ qua '(* /) # CVS'

So khớp mờ các phần hoàn thành khi bạn nhập sai chúng:

zstyle ': hoàn thành: *' hoàn thành _complete _match _approximate
zstyle ': hoàn thành: *: khớp: *' chỉ ban đầu
zstyle ': hoàn thành: *: gần đúng: *' sai số tối đa 1 số

Và nếu bạn muốn số lỗi được _approximate cho phép tăng theo độ dài
những gì bạn đã gõ cho đến nay:

zstyle -e ': hoàn thành: *: gần đúng: *' \
max-error 'reply = ($ ((($ # PREFIX + $ # SUFFIX) / 3)) số)'

Bỏ qua các chức năng hoàn thành cho các lệnh bạn không có:

zstyle ': hoàn thành: *: các hàm' mẫu bị bỏ qua '_ *'

Với các chức năng trợ giúp như:

xdvi () {lệnh xdvi $ {*: - *. dvi (om [1])}}

bạn có thể tránh phải hoàn thành trong nhiều trường hợp, nhưng nếu làm như vậy, bạn có thể muốn
rơi vào lựa chọn menu ngay lập tức và sắp xếp các từ theo thời gian:

zstyle ': hoàn thành: *: *: xdvi: *' menu có chọn
zstyle ': hoàn thành: *: *: xdvi: *' thời gian sắp xếp tệp

Hoàn thành ID quy trình với lựa chọn menu:

zstyle ': hoàn thành: *: *: kill: *' menu có chọn
zstyle ': hoàn thành: *: kill: *' luôn luôn có force-list

Nếu bạn kết thúc việc sử dụng một thư mục làm đối số, điều này sẽ xóa dấu gạch chéo ở cuối (hữu ích
bằng ln)

zstyle ': hoàn thành: *' bóp-chém true

cd sẽ không bao giờ chọn thư mục mẹ (ví dụ: cd ../ ):

zstyle ': hoàn thành: *: cd: *' bỏ qua-cha mẹ cha mẹ pwd

Một phương pháp khác cho nhanh chóng thay đổi thư mục. Thêm cái này vào của bạn ~ / .zshrc, sau đó chỉ cần nhập
"Cd .... / dir"

hợp lý hóa-dấu chấm () {
if [[$ LBUFFER = * ..]]; sau đó
LBUFFER + =/ ..
khác
LBUFFER + =.
fi
}
zle -N hợp lý hóa-dấu chấm
khóa liên kết. hợp lý hóa dấu chấm

UNSORTED / MISC ví dụ
Gợi ý: Bạn có thể tìm thấy danh sách các Vòng loại toàn cầu hợp lệ trong zshexn(1). Xem “người đàn ông 1 zshexpn |
less -p ”để biết chi tiết.

# Lấy tên của tất cả các tệp * không * khớp với mẫu * ở bất kỳ đâu * trên
# tệp (và không có `` -L '' vì GNUish của nó)
$ print -rl - * (. ^ e {'grep -q pattern $ REPLY'})
# hoặc là
$: * (. e {'grep -q pattern $ REPLY || print -r - $ REPLY'})

# Số ngẫu nhiên
$ echo $ [$ {RANDOM}% 1000] # ngẫu nhiên trong khoảng 0-999
$ echo $ [$ {RANDOM}% 11 + 10] # ngẫu nhiên trong khoảng 10-20
$ echo $ {(l: 3 :: 0:) $ {RANDOM}} dài # N chữ số (3 chữ số)

# đảo ngược một từ
$ echo "$ {(j ::) $ {(@ Oa) $ {(s ::): - xin chào}}}"

# Hiển thị thư mục mới nhất
$ ls -ld * (/ om [1])

# phần tử mảng ngẫu nhiên
$ FILES = (... / files / *)
$ feh $ FILES [$ RANDOM% $ # FILES + 1]

# con mèo dòng đầu tiên trong tất cả các tệp trong dir này
$ cho tệp (* (ND-.)) IFS = read -re <$ tệp

# kiểm tra xem một tham số có phải là số không
$ if [[$ 1 == <->]]; sau đó
echo số
khác
echo không phải số
fi

# Cho tôi xem tất cả các tệp .c không có tệp .o nào.
$ print * .c (e _ '[[! -e $ REPLY: ro]]' _)

# Tất cả các tệp trong / var / không thuộc sở hữu của root
$ ls -ld / var /* (^ u: root)

# Tất cả các tệp mà chủ sở hữu mũ đọc và thực thi quyền
$ echo * (f: u + rx :)

# Tương tự, nhưng những người khác không có quyền thực thi
$ echo * (f: u + rx, ox :)

# mở rộng dấu ngoặc nhọn - ví dụ
$ X = (ABC)
$ Y = (+ -)
$ print -r - $ ^ X. $ ^ Y

A. + A.- B. + B.- C. + C.-
# Tìm nạp tệp mới nhất có chứa chuỗi 'fgractg * .log' trong
# tên tệp và chứa chuỗi 'ORA-' trong đó
$ file = (fgractg * .log (Nm0om [1]))
$ (($ # tệp)) && grep -l ORA- $ tệp
# không có Zsh
$ files = $ (find. -name. -o -prune -name 'fgractg *> log' -mtime 0 -print)
> if [-n "$ files"]; sau đó
> IFS = '
> '
> set -f
> file = $ (ls -td $ files | head -1)
> grep -l ORA- "$ file"
> fi

# giữ số lượng quy trình con được chỉ định chạy cho đến khi toàn bộ tác vụ hoàn thành
$ zsh -c 'sleep 1 & sleep 3 & sleep 2 & print -rl - $ jobtexts'

# Xóa các tệp có độ dài bằng XNUMX và .bak trong một thư mục
$ rm -i * (. l0) * .bak (.)

# in ra các tệp không có phần mở rộng
$ printf '% s \ n' ^? *. *
$ printf '% s \ n' ^? *. [^.] * (D)
$ ls -d - ^? *. * (D)

# Tìm tệp không chứa một chuỗi cụ thể
tệp $ print -rl * | comm -2 -3 - <(tệp chuỗi grep -l *) '
$ cho f (tệp * (N)) chuỗi grep -q $ f || print -r $ f '

# Hiển thị / Kiểm tra xem một tùy chọn đã được đặt hay chưa. Nó hoạt động cả với $ tùy chọn như
# với $ nội trang
$ echo $ options [đúng]
off
$ $ tùy chọn [zle]
on

# Đếm số lượng thư mục trên ngăn xếp
$ print $ (($ {$ {(z) $ {(f) "$ (dirs -v)"} [- 1]} [1]} + 1)) # hoặc
$ dirs -v | awk '{n = $ 1} HẾT {print n + 1}'

# Khớp tất cả các tệp không có dấu chấm trong tên tệp
$ ls * ~ *. * (.)

# Chỉ hiển thị địa chỉ ip từ `` ifconfig device ''
# ifconfig từ net-tools (Linux)
$ in $ {$ {$ (LC_ALL = C / sbin / ifconfig eth0) [7]}: gs / addr: //}
# ifconfig từ 4.2BSD BSD {Miễn phí, Mạng, Mở}
$ in $ {$ (/ sbin / ifconfig tun0) [6]}

# Ping tất cả các địa chỉ IP trong một vài máy chủ lớp C hoặc tất cả
# vào trong / Etc / hosts
$ cho tôi trong {1..254}; thực hiện ping -c 1 192.168.13. $ i; làm xong
or
$ I = 1
$ while ([[$ I -le 255]]); thực hiện ping -1 2 150.150.150. $ I; để I ++; làm xong
or
$ cho tôi trong $ (sed 's /#.*//'> / Etc / hosts | awk '{print $ 2}')
: làm
: echo "Đang thử $ i ..."
: ping -c 1 $ i;
: echo '============================='
: làm xong

# tải tất cả các mô-đun có sẵn khi khởi động
$ sắp chữ -U m
$ m = ()
$ cho md ($ module_path) m = ($ m $ md / ** / * (* e: 'REPLY = $ {REPLY # $ md /}' :: r))
$ zmodload -i $ m

# Đổi tên tất cả các tệp trong một thư mục sao cho tên của chúng có dạng chữ số
tiền tố # theo thứ tự sắp xếp mặc định.
$ i = 1; cho j trong *; làm mv $ j $ i. $ j; ((i ++)); làm xong
$ i = 1; cho f trong *; làm mv $ f $ (echo $ i | \
awk '{printf ("% 03d", $ 0)}'). $ f; ((i ++)); làm xong
$ số nguyên i = 0; cho f trong *; làm mv $ f $ [i + = 1]. $ f; làm xong

# Tìm (và in) tất cả các liên kết tượng trưng không có đích trong hiện tại
# bụi bẩn.
$ $ tệp ** / * (D @) | fgrep bị hỏng
$ cho tôi trong ** / * (D @); [[-f $ i || -d $ i]] || echo $ i
$ echo ** / * (@ - ^. / =% p)
$ print -l ** / * (- @)

# Liệt kê tất cả các tệp thuần túy không có phần mở rộng được liệt kê trong `` fignore ''
$ ls ** / * ~ * ($ {~ $ {(j / | /) fignore}}) (.)
# xem ở trên, nhưng bây giờ bỏ qua các tệp thực thi
$ ls ** / * ~ * ($ {~ $ {(j / | /) fignore}}) (. ^ *)

# In ra các tệp không có phần mở rộng (yêu cầu * setopt Extendedglob *
# và * setopt dotglob *)
$ printf '% s \ n' ^? *. *

# Liệt kê các tệp theo thứ tự ngược lại được sắp xếp theo tên
$ print -rl - * (Bật)
or
$ print -rl - * (^ on)

# Đồng nghĩa với `` ps ax | awk '{print $ 1}' ''
$ in -l / proc /* / cwd (: h: t: s / self //)

# Nhận PID của một tiến trình (không có `` ps '', `` sed '', `` pgrep '', ..
# (trong Linux)
$pid2() {
> địa phương tôi
> cho tôi trong / proc /<-> / stat
> làm
> [["$ (<$ i)" = * \ (($ {(j: |:) ~ @}) \) *]] && echo $ i: h: t
> xong
>}

# for X in 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y'; làm ...
$ for ((i = 36 # n; i <= 36 # y; i ++)); làm
> in $ {$ (([## 36] i)): l}
> xong
# hoặc kết hợp với `` dc ''
$ print {$ ((## n)) .. $ ((## y))} P \ 10P | dc
# hoặc với `` eval ''
$ eval print '$ {$ (([## 36]' {$ ((36 # n)) .. $ ((36 # y))} ')): l}'

# foreach trong một dòng shell
$ cho f (*) print -r - $ f

# sao chép một cách đệ quy một thư mục mà không có dữ liệu / tệp
$ dirs = (** / * (/))
$ cd - $ dest_root
$ mkdir -p - $ dirs
# hoặc không có zsh
$ tìm thấy. -type d -exec env d = "$ dest_root" \
sh -c 'exec mkdir -p - "$ d / $ 1"' '{}' '{}' \;

# Nếu `foo = 23 '', thì in với 10 chữ số với '0' đứng đầu.
$ foo = 23
$ print $ {(r: 10 :: 0:) foo}

# tìm tên của tất cả các tệp trong thư mục chính của chúng có
# hơn 20 ký tự trong tên tệp của họ
print -rl $ HOME / $ {(l: 20 ::? :) ~: -} *

# Lưu mảng
$ print -r - $ {(qq) m}> $ nameoffile # lưu nó
$ eval "m = ($ (cat - $ nameoffile)" # hoặc sử dụng
$ m = ("$ {(@ Q) $ {(z)" $ (cat - $ nameoffile) "}}") # để khôi phục nó

# get a "ls -l" trên tất cả các tệp trong cây nhỏ hơn a
# tuổi được chỉ định (ví dụ: "ls -l" tất cả các tệp trong cây mà ở đó
# được sửa đổi trong 2 ngày qua)
$ ls -tld ** / * (m-2)
# Điều này sẽ cung cấp cho bạn một danh sách 1 tệp perl dòng (không phải là ls -R).
# Nghĩ ra một cách dễ dàng để có đầu ra kiểu "ls -R" với
# chỉ các tệp mới hơn 2 ngày tuổi.
$ cho d (./**/*(/)) {
> print -r - $ '\ n' $ {d}:
> cd $ d && {
> l = (* (Nm-2))
> (($ # l)) && ls -ltd - $ l
> cd ~ -
>}
>}
# Nếu bạn cũng muốn các thư mục được bao gồm ngay cả khi mtime của chúng
# cách đây hơn 2 ngày:
$ cho d (./**/*(/)) {
> print -r - $ '\ n' $ {d}:
> cd $ d && {
> l = (* (N /, m-2))
> (($ # l)) && ls -ltd - $ l
> cd ~ -
>}
>}
# Và nếu bạn chỉ muốn liệt kê các thư mục có mtime <2 ngày:
$ cho d (./**/*(N/m-2)) {
> print -r - $ '\ n' $ {d}:
> cd $ d && {
> l = (* (Nm-2))
> (($ # l)) && ls -ltd - $ l
> cd ~ -
>}
>}

# print 42 `` - ''
$ echo $ {(l: 42 :: - :)}
# hoặc sử dụng `` $ COLUMS ''
$ echo $ {(l: $ COLUMNS :: - :)}
# và bây giờ với các màu (yêu cầu màu tự động tải; màu sắc)
$ echo "$ bg [red] $ fg [black] $ {(l: 42 :: - :)}"

# Chuyển hướng STDERR đến một lệnh như xless mà không chuyển hướng STDOUT.
$ foo 2 >> (xless)
# nhưng điều này thực thi lệnh không đồng bộ. Để thực hiện đồng bộ:
$ {{foo 1> & 3} 2> & 1 | xless} 3> & 1

# Đổi tên tất cả các tệp MP3 từ tên có dấu cách.mp3 thành Tên có dấu cách.mp3
$ cho tôi trong * .mp3; làm
> mv $ i $ {$ {(C) i}: s / Mp3 / mp3 /}
> xong

# Khớp tên tệp chỉ chứa các chữ số và kết thúc bằng .xml (yêu cầu
# * setopt kshglob *)
$ ls -l [0-9] ##. xml
$ ls -l <0-> .xml

# Xóa tất cả các tệp "không phải txt"
$ rm ./^*.txt

# Di chuyển 200 tệp từ một thư mục sang một thư mục khác
$ mv - * ([1,200]) / cái khác / Dir

# Chuyển đổi hình ảnh (foo.gif => foo.png):
$ cho tôi trong ** / *. gif; chuyển đổi $ i $ i: r.png

# chuyển đổi một bộ sưu tập các tệp mp3 thành wave hoặc cdr,
# ví dụ: file.wav -> file.mp3)
$ cho tôi (./*.mp3){mpg321 --w - $ i> $ {i: r} .wav}

# Tải xuống với Tệp được tạo bằng LaTeX2HTML (ví dụ: Hướng dẫn ZSH):
$ cho f trong http://zsh.sunsite.dk/Guide/zshguide{, {01..08}}. Html; làm
> lynx -source $ f> $ {f: t}
> xong

# Di chuyển tất cả các tệp trong dir1 và dir2 có số dòng lớn hơn 10 sang
# thư mục khác nói "/ more10"
$ mv dir [12] / ** / *. cr (-. e {'((`wc -l <$ REPLY`> 10))'}) / hơn 10

# Tạo với dpkg một danh sách chính của mọi tệp mà nó đã cài đặt
$ diff <(find / | sort) <(cat / var / lib / dpkg / info /* .list | loại)

# Thay thế chuỗi Escape-Sequences chết tiệt này:
$ autoload màu sắc; màu sắc
$ print "$ bg [cyan] $ fg [blue] Bạn là đồ ngốc" >> / dev / pts / 3

# Nhận giá trị ASCII của một ký tự
$ char = N; print $ ((# char))

# Tên tệp "Erweiterung"
# Lưu ý: Dấu (N) cho biết sử dụng tùy chọn nullglob cho trường hợp cụ thể này
# hình cầu.
$ cho tôi trong * .o (N); làm
> rm $ i
> xong

# Đổi tên tệp; tức là FOO thành foo và thanh thành BAR
$ cho tôi trong * (.); mv $ i $ {i: l} # `FOO 'thành` foo'
$ cho tôi trong * (.); mv $ i $ {i: u} # `thanh thành` BAR '

# Hiển thị tất cả các tệp suid trong $ PATH
$ ls -latg $ {(s.:.)PATH} | grep '^ ... s'
# hoặc phức tạp hơn;)
$ print -l $ {^ path} / * (Ns, S)
# hoặc chỉ hiển thị các tệp thực thi với mẫu do người dùng cung cấp
$ print -l $ {^ path} / * vim * (* N)

# tệp gzip khi chứa một chuỗi nhất định
$ gzip $ {(ps: \ 0 :) "$ (grep -lZ foobar ./*. txt (.))"}

# Một tấm lót nhỏ một lớp, đọc từ stdin và in ra để tô chữ đầu tiên
# dòng duy nhất tức là không in các dòng đã được in trước đó
# (lệnh này tương tự như lệnh duy nhất, nhưng lệnh duy nhất chỉ có thể xử lý
# dòng liền kề).
$ IFS = $ '\ n \ n'; print -rl - $ {(Oau) $ {(Oa) $ (cat file; echo.) [1, -2]}}

# Liệt kê mọi tệp thực thi trong PATH
$ print -l $ {^ path} / * (- * N)

# Khớp tất cả các tệp .c trong tất cả các thư mục con, _except_ bất kỳ thư mục con SCCS nào?
$ ls ** / *. c ~ (* /) # SCCS / *

# Liệt kê tất cả `README '- tệp không phân biệt chữ hoa chữ thường với giá trị tối đa một lỗi đánh máy
$ ls ** / * (# ia2) readme

# kiểm tra phân biệt chữ hoa chữ thường cho các biến
$ if [[$ OSTYPE == (#i) LINUX * (# I)]]; sau đó
> echo "Penguin on board."
> khác
> echo "Không phải Linux."
> fi

(Đệ quy) Đánh bóng - Các ví dụ
Bạn có thể tìm thấy danh sách các Vòng loại toàn cầu hợp lệ trong zshexn(1). Lưu ý: **/ tương đương với
(* /) #! Ví dụ:

$ print (* /) # zsh_us.ps
zsh-4.2.3 / Doc / zsh_us.ps
$ print ** / zsh_us.ps
zsh-4.2.3 / Doc / zsh_us.ps

# Tìm kiếm `README 'trong tất cả các Thư mục con
$ ls -l ** / README

# tìm các thư mục chứa cả "index.php" và "index.html" hoặc trong
# chung, thư mục chứa nhiều hơn một tệp phù hợp với "chỉ mục. *"
$ ls ** / * (D / e: '[[-e $ REPLY / index.php && -e $ REPLY / index.html]]' :)
# hoặc là
$ ls ** / * (D / e: 'l = ($ REPLY / index. * (n)); (($ # l> = 2))' :)

# Tìm lệnh để tìm kiếm tên thư mục thay vì tên cơ sở
$ print -rl / ** / * ~ ^ * / đường dẫn (| / *)
# hoặc - không có Zsh
$ tìm / | grep -e / path / -e '/ path $'

# In đường dẫn thư mục chứa mười tệp C thông thường lớn nhất
# trong thư mục hiện tại và các thư mục con.
$ print -rl - ** / *. c (D.OL [1,10]: h) | sắp xếp -u

# Tìm tệp có kích thước == 0 và gửi thư
$ files = (** / * (ND.L0m + 0m-2))
> (($ # tệp> 0)) && print -rl - $ files | \
mailx -s "tệp trống" [email được bảo vệ]

# chmod đệ quy
$ chmod 700 ** / (.) # Chỉ tệp
$ chmod 700 ** / (/) # Chỉ các thư mục

# in ra tất cả các tệp trong thư mục đó trong 2 cột
$ print -rC2 - $ {1: [...]} / * (D: t)
# ^ - cột số ob
# hoặc - nếu bạn cảm thấy lo lắng về các ký tự đặc biệt - hãy sử dụng
$ list = ($ {1: [...]} / * (ND: t))
$ (($ # list)) && print -rC2 - $ {(V) list}

# Tìm kiếm tất cả các tệp trong /nhà/* / * - mail / với cờ cài đặt `` chmod -s ''
# (đệ quy, bao gồm các tệp dotfiles) xóa cờ setgid / setuid và in
# một thông điệp
$ chmod -s /nhà/* / * - thư (DN, S) /nhà/* / * - mail / ** / * (DN, S))
# hoặc với một tập lệnh nhỏ
$ cho tệp (/nhà/* / * - thư (DN, S) /nhà/* / * - mail / ** / * (DNs, S)) {
> print -r - $ file
> chmod -s $ file && print -r fixed $ file
>}
# hoặc sử dụng `` zargs '' (yêu cầu zargs tự động tải) ngăn danh sách đối số quá
# lỗi dài
$ zargs /nhà/* / * - thư (DN, S) /nhà/* / * - mail / ** / * (DNs, S)) - chmod -s

# Liệt kê các tệp bắt đầu từ `foo23 'trở lên (foo23, foo24, foo25, ..)
$ ls -l foo <23->

# nhận tất cả các tệp bắt đầu bằng chuỗi ngày từ ngày 4 tháng XNUMX đến hết
# Ngày 9 tháng 2004 năm XNUMX
$ ls -l 200406 {04..10} * (N)
# hoặc nếu chúng có dạng 200406XX (yêu cầu `` setopt expand_glob ''
$ ls -l 200306 <4-10>. *

# xóa khoảng trắng khỏi tên tệp
$ cho một trong ./**/* \ * (Dod); làm mv $ a $ {a: h} / $ {a: t: gs / / _}; làm xong

# Chỉ hiển thị tất cả các tệp * .c và * .h -
$ ls -l *. (c | h)

# Chỉ hiển thị tất cả các tệp * .c - và bỏ qua `foo.c '
$ ls * .c ~ foo.c

# hiển thị dữ liệu sang định dạng nhị phân * thực sự *
$ zsh -ec 'trong khi {} {printf% .8x $ n; lặp lại 8 \
> {read -ku0 a printf \% .8d $ (([## 2] #a))}; print; ((n + = 8))} '<binary

# Chỉ hiển thị các tệp có thể đọc được trên thế giới
$ ls -l * (R)

# Tệp danh sách trong thư mục hiện tại không được chủ sở hữu ghi
$ print -l ~ / * (ND. ^ w)

# tìm và xóa các tệp cũ hơn một tham số nhất định
# (giây / phút / giờ)
# xóa tất cả tệp thông thường trong / Dir cũ hơn 3 giờ
$ rm -f /Dir/**/*(.mh+3)
# xóa tất cả các liên kết tượng trưng trong / Dir cũ hơn 3 phút
$ rm -f / Dir / ** / * (@ mm + 3)
# xóa tất cả không phải dirs trong / Dir cũ hơn 30 giây
$ rm -f / Dir / ** / * (mili giây + 30 ^ /)
# xóa tất cả các thư mục, thư mục con và tệp cũ hơn một giờ
$rm ./**/*(.Dmh+1,.DL0)
# xóa tất cả các tệp cũ hơn 6 giờ
$ rm -f ** / * (mh + 6)
# xóa tất cả các tệp trừ 10 tệp mới hơn (xóa tất cả trừ XNUMX tệp cuối cùng
# tệp trong một thư mục)
$ rm ./*(Om[1,-11])
Lưu ý: Nếu bạn nhận được danh sách đối số quá dài, bạn sử dụng rm nội trang. Vì
thí dụ:
$ zmodload zsh / tệp; rm -f ** / * (mh + 6)
hoặc sử dụng hàm zargs:
$ autoload zargs; zargs ** / * (mh + 6) - rm -f

# Hướng dẫn Người dùng về Z-Shell /5.9: Tạo và Mẫu tên tệp
# Kết hợp tìm tất cả các tệp trong tất cả các thư mục con, tìm kiếm đệ quy,
# có tên đã cho, không phân biệt chữ hoa chữ thường, có dung lượng ít nhất 50 KB,
# không quá một tuần tuổi và thuộc sở hữu của người dùng root và cho phép
# đối với một lỗi chính tả của tên. Trên thực tế, yêu cầu
# biểu thức trông như thế này:
$ ls ** / (# ia1) tên (LK + 50mw-1u0)

# Thay đổi UID từ 102 thành 666
$ chown 666 ** / * (u102)

# Liệt kê tất cả các tệp chưa được cập nhật kể từ 10 giờ qua
$ print -rl - * (Dmh + 10 ^ /)

# chỉ xóa tệp cũ nhất trong thư mục
$ rm ./*tên tệp*(Om[1])

# Sắp xếp đầu ra từ `ls -l 'theo kích thước tệp
$ ls -fld * (CV)

# tìm tệp gần đây nhất trong thư mục
$ setopt dotglob; thư mục in / ** / * (om [1])

# Chỉ hiển thị các tệp trống không có "nhóm" hoặc "thế giới có thể ghi"
$ ls * (L0f.go-w.)

# Tìm - và liệt kê - mười tệp mới nhất trong thư mục và thứ tự con.
# (đệ quy)
$ print -rl - ** / * (Dom [1,10])

# Chỉ in 5 dòng bằng lệnh "ls" (như `` ls -laS | head -n 5 '').
$ ls -fl * (DOL [1,5])

# Hiển thị 5-10 tệp được sửa đổi cuối cùng.
$ print -rl - /path/to/dir/**/*(D.om[5,10])

# Tìm tất cả các tệp không có chủ sở hữu hợp lệ.
$ chmod someuser / ** / * (D ^ u: $ {(j.:u:.) $ {(f) "$ (/ etc / passwd) "} %%: *} :)

# Tìm tất cả các thư mục trống trong một cây.
$ cho f trong *** / * (/ l2); do foo = ($ f / * (N)); [[-z $ foo]] && print $ f; làm xong
# Lưu ý: Vì Zsh 4.2.1 nên định nghĩa toàn cầu F chỉ ra một thư mục không trống.
# Do đó * (F) chỉ ra tất cả các thư mục con có mục nhập, * (/ ^ F) có nghĩa là tất cả
# thư mục con không có mục nhập.
$ ls -ld * (/ ^ F)

# Xóa các thư mục trống sau đó.
$ rmdir ./**/*(/od) 2> / dev / null

# Chỉ hiển thị các tệp do nhóm 'người dùng' sở hữu.
$ ls -l * (G [người dùng])

Bổ ngữ sử dụng
Công cụ sửa đổi là một cơ chế mạnh mẽ cho phép bạn sửa đổi kết quả được trả về bởi tham số,
tên tệp và mở rộng lịch sử. Nhìn thấy zshexn(1) để biết chi tiết.

# LƯU Ý: Cần có Zsh 4.3.4!
$ autoload -U tuổi
# tệp được sửa đổi hôm nay
$ print * (e: tuổi hôm nay bây giờ :)
# tệp được sửa đổi kể từ 5 giờ chiều
$ print * (e-age 17:00 nay-)
# ... kể từ 5 giờ yesterda
$ print * (e-age hôm qua, 17: 00 bây giờ-)
# ... từ Giáng sinh năm ngoái đến hôm nay
$ print * (e-age 2006/12/25 ngày nay-)
# ... trước ngày hôm qua
$ print * (e-age 1970/01/01 hôm qua-)
# tất cả các tệp được sửa đổi từ đầu những ngày đó
$ print * (e: age 2006/10/04 2006/10/09 :)
# tất cả các tệp được sửa đổi vào ngày đó
$ print * (e: age 2006/10/04 :)
# Thời gian cung cấp.
$ print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)

# Loại bỏ một thành phần tên đường dẫn ở cuối, để lại phần đầu. Điều này hoạt động như
# `tên dirname '.
$ echo = ls (: h)
/ thùng rác

# Loại bỏ tất cả các thành phần tên đường dẫn đầu, để lại phần đuôi. Những công việc này
# như `basename '.
$ echo = ls (: t)
ls

# Xóa hậu tố khỏi mỗi tệp (* .sh trong ví dụ này)
$ f: e là phần mở rộng tệp $ f
: h -> head (dirname)
: t -> tail (tên cơ sở)
: r -> rest (phần mở rộng đã bị xóa)
$ cho f (* .sh) mv $ f $ f: r

# Xóa phần mở rộng tên tệp có dạng `.xxx ', để lại tên gốc.
$ echo $ PWD
/ usr / src / linux
$ echo $ PWD: t
linux

# Xóa tất cả trừ phần mở rộng.
$ foo = 23.42
$ echo $ foo
23.42
$ echo $ foo: e
42

# In lệnh mới nhưng không thực thi. Chỉ hoạt động với lịch sử
# sự bành trướng.
$ echo = ls (: h)
/ thùng rác
$! echo: p
$ echo = ls (: h)

# Trích dẫn các từ được thay thế, thoát khỏi các từ thay thế khác.
$ bar = "23'42"
$ echo $ bar
23'42
$ echo $ bar: q
23 \ '42

# Chuyển các từ thành tất cả các chữ thường.
$ bar = FOOBAR
$ echo $ bar
BÓNG ĐÁ
$ echo $ bar: l
foobar

# Chuyển các từ thành tất cả các chữ hoa.
$ bar = foobar
$ echo $ bar
foobar
$ echo $ bar: u
BÓNG ĐÁ

# chuyển ký tự đầu tiên của một từ thành chữ hoa
$ foo = "một hai ba bốn"
$ print -r - "$ {(C) foo}"
Một hai ba bốn

Chuyển hướng-Ví dụ
Xem zshmisc(1) để biết thêm thông tin (hoặc ít hơn $ {^ fpath} / zmv (N))

# Nối `exit 1 'vào cuối tất cả các tệp * .sh -
$ echo "lối ra 1" >> * .sh

# thêm tệp vào foobar.tar.gz
$ eval set = (gunzip <foobar.tar.gz) '
tar rf $ 1 added.txt && gzip <$ 1> foobar.tar.gz '

# Chuyển hướng đầu ra đến tệp VÀ hiển thị trên màn hình
$ foobar> & 1> file1> file2> ..

# ống đầu ra duy nhất đến nhiều đầu vào
$ zcat foobar.Z >> (gzip -9> file1.gz) \
>> (bzip2 -9> file1.bz2) \
>> (acb --best> file1.acb)

# Nối / etc / services ở cuối tệp `foo 'và` bar'
$ mèo / etc / services >> foo >> thanh

# ống STDERR
$ echo Lỗi> & 2 2> & 1 | sed -e 's / A / I /'

# gửi đầu ra tiêu chuẩn của một quy trình tới đầu vào tiêu chuẩn của một số quy trình
# trong đường ống
$ setopt multios
$ process1>> (process1)>> (process2)

# khởi tạo một biến và đồng thời giữ đầu ra của thiết bị đầu cuối
$ setopt multios
$ {a = $ (lệnh> & 1> & 3 3> & - 2> & 1);} 3> & 1

# redirect stderr hai lần
$ setopt multios; chương trình 2> tệp2> tệp1 2> & 1

# Nhân bản stdout và stderr vào logfile
$ executive 3> & 1> logfile 2> & 2 2> & 1> & 3 3> & -

# redirect stderr (only) tới một tệp và đến orig. stderr:
$ lệnh 2> & 2 2> stderr
# redirect stderr và stdout đến các tệp riêng biệt và cả hai để orig. stdout:
$ command 2> & 1 1> & 1 2> stderr 1> stdout
# redirect stderr và stdout để tách các tệp và stdout thành orig. stdout
# AND stderr để khởi tạo. stderr:
$ command 2> & 2 1> & 1 2> stderr 1> stdout

# Vui hơn với STDERR;)
$ ./my-script.sh 2>> (grep -v moron> error.log) | process-output> output.log
$ echo "Đó là STDOUT" >> (sed 's / stdout / another example /'> foobar)

ZMV-Ví dụ (yêu cầu tự động tải zmv)
Lưu ý: -n nghĩa là không thực thi (chỉ in những gì sẽ xảy ra). Tại

# Xóa các ký tự bất hợp pháp trong hệ thống tệp fat32. Các ký tự bất hợp pháp là
# /:; *? "<> |
# LƯU Ý: `` -Q '' và (D) là bao gồm các tệp ẩn.
$ không mong muốn = '[:; *? \ "<> |]'
$ zmv -Q "(** /) (* $ ~ không mong muốn *) (D)" '$ 1 $ {2 // $ ~ không mong muốn /}'

# Thay đổi một phần của tên tệp (tức là "tệp-hell.name" -> "tệp-heaven.name")
$ zmv '(*) địa ngục (*)' '$ {1} thiên đường $ {2}'
# hoặc là
$ zmv '*' '$ f: s / địa ngục / thiên đường /'

# loại bỏ dấu ngoặc tròn trong tên tệp
# tức là foo- (bar) .avi -> foo-bar.avi
$ zmv '*' '$ {f // [()] /}'

# nối tiếp tất cả các tệp (foo.foo> 1.foo, fnord.foo> 2.foo, ..)
$ tự động tải zmv
$ l*
1.c asd.foo bla.foo fnord.foo foo.fnord foo.foo
$ c = 1 zmv '* .foo' '$ ((c ++)). foo'
$ l*
1.c 1.foo 2.foo 3.foo 4.foo foo.fnord

# Đổi tên "file.with.many.dots.txt" bằng cách thay thế các dấu chấm (dành cho dấu cuối cùng
# một!) với khoảng trắng
$ touch {1..20} -file.with.many.dots.txt
$ zmv '(*. *) (. *)' '$ {1 //. / } $ 2 '

# Xóa 4 ký tự đầu tiên khỏi tên tệp
$ zmv -n '*' '$ f [5, -1]' # LƯU Ý: "5" KHÔNG phải là lỗi viết!

# Đổi tên tất cả các tệp dưới Dir hiện tại thành chữ thường, nhưng giữ nguyên
# dirnames nguyên trạng.
$ zmv -Qv '(** /) (*) (. d)' '$ 1 $ {(L) 2}'

# thay thế tất cả ký tự thứ 4, là "1", bằng "2", v.v.
$ tự động tải -U zmv
$ zmv '(???) 1 (??? [1-4] .txt)' '$ {1} 2 $ {2}'

# Xóa 15 ký tự đầu tiên khỏi một chuỗi
$ touch 111111111111111 {az}
$ tự động tải zmv
$ zmv '*' '$ f [16, -1]'

# Thay thế khoảng trắng (bất kỳ số nào trong số chúng) bằng một dấu gạch ngang trong tên tệp
$ tự động tải zmv
$ zmv -n '(** /) (* *)' '$ 1 $ {2 // (# - ## # | ##) / -}'
# hoặc - với Bash
$ tìm thấy. -depth -name '* *' -exec bash -c '
> shopt -s extglob
> tệp = $ 1
> dir = $ {file% / *}
> name = $ {file ## * /}
> newname = $ {name // * ([-]) * ([-]) / -}
> mv -i - "$ file" "$ Dir / $ newname" '{} {} \;

# Xóa tên tệp và xóa các ký tự đặc biệt
$ tự động tải zmv
$ zmv -n '(** /) (*)' '$ 1 $ {2 // [^ A-Za-z0-9 ._] / _}'

# Thêm * .py vào một loạt các tập lệnh python trong một thư mục (một số tập lệnh kết thúc
# in * .py và cung cấp cho tất cả chúng một phần mở rộng thích hợp
$ tự động tải zmv
$ zmv -n '(** /) (con *) (# qe, tệp $ REPLY | grep "python script",)' '$ 1 $ 2.py'

# viết thường tất cả các phần mở rộng (tức là * .JPG) bao gồm. thư mục con
$ tự động tải zmv
$ zmv '(** /) (*). (# i) jpg' '$ 1 $ 2.jpg'
# Hoặc - không có Zsh
$ find Dir -name '*. [jJ] [pP] [gG]' -print | trong khi đọc f
> làm
> trường hợp $ f trong
> * .jpg);
> *) mv "$ f" "$ {f%. *}. jpg" loading = "lazy";
> esac
> xong

# xóa các số XNUMX ở đầu khỏi phần mở rộng tệp
$ tự động tải zmv
$ls
tên tệp.001 tên tệp.003 tên tệp.005 tên tệp.007 tên tệp.009
tên tệp.002 tên tệp.004 tên tệp.006 tên tệp.008 tên tệp.010
$ zmv '(tên tệp.) 0 ## (? *)' '$ 1 $ 2'
$ls
tên tập tin.1 tên tập tin.10 tên tập tin.2 tên tập tin.3 tên tập tin.4 tên tập tin.5.

# đánh số lại tệp.
$ tự động tải zmv
$ l*
foo_10.jpg foo_2.jpg foo_3.jpg foo_4.jpg foo_5.jpg foo_6.jpg ..
$ zmv -fQ 'foo_ (<0->) .jpg (.nOn)' 'foo _ $ (($ 1 + 1)). jpg'
$ l*
foo_10.jpg foo_11.jpg foo_3.jpg foo_4.jpg foo_5.jpg ...

# thêm các số 1 ở đầu vào tên tệp (001.jpg -> XNUMX.jpg, ..
$ tự động tải zmv
$ zmv '(<1->) .jpg' '$ {(l: 3 :: 0:) 1} .jpg'

# Xem ở trên, nhưng bây giờ chỉ các tệp có tên tệp> = 30 ký tự
$ tự động tải zmv
$ c = 1 zmv "$ {(l: 30-4 ::?:)} *. foo" '$ ((c ++)). foo'

# Thay thế khoảng trắng trong tên tệp bằng một gạch dưới
$ tự động tải zmv
$ zmv '* *' '$ f: gs / / _'

# Thay đổi hậu tố từ * .sh thành * .pl
$ tự động tải zmv
$ zmv -W '* .sh' '* .pl'

# Thêm phần mở rộng "" .txt "vào tất cả các tệp trong $ {HOME}
# `` -. '' là chỉ đổi tên các tệp thông thường hoặc các liên kết tượng trưng thành các tệp thông thường,
# `` D '' cũng là để đổi tên các tệp ẩn (dotfiles))
$ tự động tải zmv
$ zmv -Q '/nhà/** / * (D-.) '' $ F.txt '
# Hoặc chỉ đổi tên các tệp không có phần mở rộng:
$ zmv -Q '/nhà/** / ^? *. * (D-.) '' $ F.txt '

# Thay đổi đệ quy tên tệp bằng các ký tự? [] / = + <>; : ", - *
$ tự động tải zmv
$ chars = '[] [? = + <>; ", * -]'
$ zmv '(** /) (*)' '$ 1 $ {2 // ký tự $ ~ /%}'

# Xóa trích dẫn đơn khỏi tên tệp (đệ quy)
$ tự động tải zmv
$ zmv -Q "(** /) (* '*) (D)" "\ $ 1 \ $ {2 //' /}"

# Khi một tệp mới đến (có tên là tệp.txt), hãy đổi tên tất cả các tệp để
# get (ví dụ: file119.txt trở thành file120.txt, file118.txt trở thành
# file119.txt, v.v. kết thúc bằng file.txt trở thành file1.txt
$ tự động tải zmv
$ zmv -fQ 'tệp ([0-9] ##). txt (Bật)' 'tệp $ (($ 1 + 1)). txt'

# chữ thường / chữ hoa tất cả các tệp / thư mục
$ tự động tải zmv
$ zmv '(*)' '$ {(L) 1}' # chữ thường
$ zmv '(*)' '$ {(U) 1}' # chữ hoa

# Xóa hậu tố * .c khỏi tất cả các C-Files
$ tự động tải zmv
$ zmv '(*). c' '$ 1'

# Chỉ viết hoa chữ cái đầu tiên của tất cả * .mp3 - tệp
$ tự động tải zmv
$ zmv '([az]) (*). mp3' '$ {(C) 1} $ 2.mp3'

# Sao chép mục tiêu `README 'trong cùng một thư mục với mỗi` `Makefile' '
$ tự động tải zmv
$ zmv -C '(** /) Makefile' '$ {1} README'

# Xóa trích dẫn đơn khỏi tên tệp (đệ quy)
$ tự động tải zmv
$ zmv -Q "(** /) (* '*) (D)" "\ $ 1 \ $ {2 //' /}"

# Đổi tên pic1.jpg, pic2.jpg, .. thành pic0001.jpg, pic0002.jpg, ..
$ tự động tải zmv
$ zmv 'pic (*). jpg' 'pic $ {(l: 4 :: 0:) 1} .jpg'
$ zmv '(** /) pic (*). jpg' '$ 1 / pic $ {(l: 4 :: 0:) 2} .jpg' # đệ quy

Mô-đun-Ví dụ
Hãy đọc mô-đun zsh(1) đầu tiên!

zsh / pcre (yêu cầu zmodload zsh / pcre)
# Sao chép tệp của một khoảng thời gian nhất định (ngày được ghi trong tên tệp)
$ zmodload zsh / pcre
$ ls -d - * (e: '[[$ REPLY -pcre-match pcre-regexp]]' :)
# hoặc là
$ m () {[[$ 1 -pcre-match pcre-regexp]]}
$ ls -d - * (+ m)

zsh / clone (yêu cầu zmodload zsh / clone)
# Tạo một phiên bản được chia nhỏ của trình bao hiện tại ($! Được đặt thành XNUMX) và
# thực thi `` lệnh '' trên / dev / tty8 (ví dụ này).
$ zmodload zsh / bản sao
$ clone / dev / tty8 && (($! == 0)) && Lệnh thực thi

zsh / datetime (yêu cầu zmodload zsh / datetime)
$ zmodload zsh / datetime
$ bí danh datereplacement = 'strftime "% Y-% m-% d" $ EPOCHSECONDS'
$ export DATE = `datereplacement`
$ echo $ DATE

# dải ngày khỏi tên tệp
$ $ zmodload zsh / datetime
$ setopt Extendedglob
$ chạm vào aaa_bbb_20041212_c.dat eee_fff_20051019_g.dat
$ strftime -s mẫu \
'??? _ ??? _ <0-% Y% m% d> _ ?. dat' $ ((EPOCHSECONDS - 365 * 24 * 60 * 60/2))
$ print -rl - $ ~ mẫu
aaa_bbb_20041212_c.dat
$ print -rl - $ pattern
??? _ ??? _ <0-20050815> _? Dat

# Kích thước tệp tìm kiếm == 0, dựa trên tên tệp chứa ngày tháng
# thay vì ngày "sửa đổi lần cuối" của tệp
$ zmodload -i zsh / datetime
Tệp $ strftime -s "abc_de_% m% d% Y.dat" $ ((EPOCHSECONDS - 24 * 60 * 60))
$ files = (** / $ file (N.L0))
$ (($ # tệp> 0)) && print -rl - $ tệp | \
mailx -s "tệp trống" [email được bảo vệ]

zsh / stat (yêu cầu zmodload zsh / stat)
# kiểm tra xem một liên kết tượng trưng có liên kết đến một tệp nhất định không
$ zmodload -i zsh / stat
$! stat -LH s foo.ln || [[$ s [link]! = "foo.exe"]] || ln -sf foo.exe foo.ln

# so sánh ngày tệp
$ zmodload zsh / stat
$ file1 = foo
$ file2 = bar
$ touch bar & sleep 5 & touch foo
$ echo $ file1 là $ (($ (stat + mtime $ file2) - \
$ (stat + mtime $ file1))) giây cũ hơn $ file2.
thanh cũ hơn foo 5 giây

# liệt kê các tệp của đĩa nhỏ hơn một số tệp khác
$ zmodload zsh / stat
$ stat -A max + kích thước một số-tệp khác
$ print -rl ./**/*(DL-$max)

# Liệt kê 100 tệp lớn nhất hàng đầu trong đĩa
$ zmodload zsh / stat
$ ls -fld ./**/*(d`stat + thiết bị .`OL [1,100])

# Chỉ lấy tên người dùng và tên tệp từ (như
# ls -l * | awk '{print $ 3 "" $ 8}')
$ zmodload zsh / stat
$ cho tệp; làm
> stat -s Một người dùng + uid - "$ file" &&
> print -r - "$ user" "$ file"
> xong

# lấy sự khác biệt giữa byte thực tế của tệp và byte tệp được phân bổ
$ zmodload zsh / stat
$ print $ (($ (stat + block - file) * 512 - $ (stat + size - file)))

# Tìm tệp lớn nhất
# `` D '': để bao gồm các tệp dấu chấm (d là chữ thường dành cho thiết bị)
# `` O '': có Thứ tự đảo ngược (o chữ thường cho thứ tự không đảo ngược)
# `` L '': theo Độ dài tệp (l là số liên kết)
# `` [1] '': chỉ trả về kết quả đầu tiên
$ zmodload zsh / stat
$ stat + size ./*(DOL[1])

# kích thước tệp tính bằng byte
$ zmodload zsh / stat
$ stat -L + kích thước ~ / .zshrc
4707

# Xóa các tệp trong thư mục không được truy cập trong mười ngày qua
# và gửi MỘT thư cho chủ sở hữu tệp để thông báo cho họ về tệp '
# xóa.
$ zmodload zsh / stat zsh / tệp
$ sắp chữ -A f; f = ()
$ rm -f /path/**/*(.a+10e{'stat -sA u + uidr $ REPLY; f [$ u] = "$ f [$ u] $ REPLY" '})
$ cho người dùng ($ {(k) f}) {print -rn $ f [$ user] | mailx -s "..." $ user}

# Nhận "ls -l" trên tất cả các tệp trong cây nhỏ hơn a
# tuổi được chỉ định
$ zmodload zsh / stat
$ cho d (./**/*(N/m-2))
> print -r - $ '\ n' $ d: && cd $ d && {
> cho f (* (Nm-2om))
> stat -F '% b% d% H:% M' -LsAs - $ f &&
> print -r - $ s [3] $ {(l: 4:) s [4]} $ {(l: 8:) s [5]} \
> $ {(l: 8:) s [6]} $ {(l: 8:) s [8]} $ s [10] $ f $ {s [14]: + -> $ s [14]}
> cd ~ -
>}

# lấy ngày tạo tệp
$ zmodload zsh / stat
$ stat -F '% d% m% Y' + mtime ~ / .zshrc
30 06 2004
$ stat -F '% D' + mtime ~ / .zshrc
06/30/04

zsh / tệp (yêu cầu zmodload zsh / tệp)
# tìm kiếm một thư mục cho các tệp có chứa một chuỗi nhất định, sau đó sao chép chúng
# tệp vào một thư mục khác.
$ zmodload zsh / tệp
$ IFS = $ '\ 0'
$ cp $ (grep -lZr foobar.) thư mục khác

zsh / mapfile (yêu cầu zmodload zsh / mapfile)
# grepping cho hai mẫu
$ zmodload zsh / mapfile
$ pattern1 = "foo"
$ pattern2 = "thanh foo"
$ print -l ./**/*(DN.e{'z=$mapfile[$REPLY] && [[$ z = * $ pattern1 * && \
$ z = * $ pattern2 *]] '})
# hoặc một giải pháp kết hợp với zsh / pcre
$ zmodload -i zsh / mapfile zsh / pcre
$ pattern1 = "foo"
$ pattern2 = "thanh foo"
$ pcre_compile "(? s) (? =. *? $ pattern1). *? $ pattern2"
$ pcre_study
$ print -l ./**/*(DN.e{'pcre_match $ mapfile [$ REPLY] '})

# tương đương với `` less / etc / passwd | gốc grep -v ''
$ zmodload zsh / mapfile
$ IFS = $ '\ n \ n'
$ print -rl - $ {$ {= mapfile [/ etc / passwd]}:#*nguồn gốc*}
# hoặc - không phân biệt chữ hoa chữ thường
$ setopt Extendedglob
$ print -rl - $ {$ {= mapfile [/ etc / passwd]}: # * (# i) root *}

# Nếu tệp XML chứa những thứ như `` '' và '' '', số
# thẻ trống này (những thẻ kết thúc bằng '/>') nên nếu gặp trong cùng một
# order, các thẻ tiếp theo sẽ trở thành `` 1 '' và
# `` 2 ''
$ zmodload zsh / mapfile
$ cnt = 0
$ apfile [data.xml.new] = $ {(S) mapfile [data.xml] // \
> (#im) * <\ / TAGA> / $ ((++ cnt)) <\ / TAGA>}

# xóa tất cả các tệp trong người dùng Maildir / new có chứa `` filename = "gone.src ''
$ zmodload zsh / {tệp, mapfile}
$ rm -f / u1 / ?? / * / Maildir / new / 100 * (. e {'[[$ mapfile [$ REPLY] == \
* filename = \ "gone.scr \" *]] '})

# Xóa Tiêu đề khỏi tệp tái bút và nối giá trị đó vào
# cuối của tên tệp
$ tự động tải -U zmv
$ zmodload zsh / mapfile
$ zmv '(*). ps' '$ 1 - $ {$ {$ {mapfile [$ f] ## * %% Tiêu đề:} %% *} // [^ a-zA-Z0-9 _] /}. ps '

zsh / mathfunc (yêu cầu zmodload zsh / mathfunc)
$ zmodload zsh / mathfunc
$ echo $ ((sin (1 / 4.0) ** 2 + cos (1 / 4.0) ** 2 - 1))
-1.1102230246251565e-16
$ echo $ ((pi = 4.0 * atan (1.0)))
3.1415926535897931
$ echo $ ((f = sin (0.3)))
0.29552020666133955
$ print $ ((1e12 * rand48 ()))
847909677310.23413
$ print $ ((rand48 (seed)))
0.01043488334700271

zsh / termcap (yêu cầu zmodload zsh / termcap)
$ zmodload -ab zsh / termcap echotc
$ GREEN = `echotc AF 2 '
$ YELLOW = `echotc AF 3 '
$ RED = `echotc AF 1 '
$ BRIGHTRED = `echotc md; echotc AF 1 '
$ print -l $ {GREEN} xanh lục $ {YELLOW} vàng $ {RED} đỏ $ {BRIGHTRED} sáng

zsh / zpty (yêu cầu zmodload zsh / zpty)
$ zmodload zsh / zpty
$ zpty PW passwd $ 1
$ zpty PW passwd $ 1
# `` -r '': đọc đầu ra của tên lệnh.
# `` z '': Tham số
$ zpty -r PW z '* mật khẩu:'
# gửi lệnh đến đặt tên cho các chuỗi đã cho làm đầu vào
$ zpty -w PW $ 2
$ zpty -r PW z '* mật khẩu:'
$ zpty -w PW $ 2
# Dạng thứ hai, với tùy chọn -d, được sử dụng để xóa các lệnh
# đã bắt đầu trước đó, bằng cách cung cấp danh sách tên của họ. Nếu không có tên
# được đưa ra, tất cả các lệnh sẽ bị xóa. Xóa lệnh gây ra HUP
# tín hiệu sẽ được gửi đến tiến trình tương ứng.
$ zpty -d PW

zsh / net / socket (yêu cầu zmodload zsh / net / socket)
# `` -l '': mở một ổ cắm đang nghe trên tên tệp
# `` -d '': đối số sẽ được lấy làm bộ mô tả tệp đích cho
# sự liên quan
# `` 3 '': bộ mô tả tệp. Xem `` Hướng dẫn sử dụng cho Z-Shell ''
# (3.7.2: Bộ mô tả tệp)
$ zmodload zsh / net / socket
$ zsocket -l -d 3
# `` -a '': chấp nhận kết nối đến với ổ cắm
$ zsocket -a -d 4 3
$ zsocket -a -d 5 3 # chấp nhận kết nối
$ echo foobar> & 4
$ echo barfoo> & 5
$ 4> & - 5> & - 3> &

zsh / zftp (yêu cầu zmodload zsh / zftp)
$ tự động tải -U zfinit
$zfinit
$ zfparams www.example.invalid mypassword myuserid
$ zfopen
mẹo $ zfcd
$ zfls -l zshtips.html
$ zfput zshtips.html
$ zfls -l zshtips.html

# Tự động chuyển tệp bằng FTP có kiểm tra lỗi
$ autoload -U zfinit; zfinit
$ zftp mở mật khẩu người dùng host.name.invalid || lối ra
$ zftp get / remote / file> / local / file; r = $?
$ zftp đóng && thoát r

# nén và ftp một cách nhanh chóng
$ autoload -U zfinit; zfinit
$ zftp mở mật khẩu người dùng host.name.invalid
$ zftp lấy $ file | bzip2> $ {file} .bz2
$ zftp đóng

# Đệ quy `` get ''
$ autoload -U zfinit; zfinit
$ zfanon cr.yp.to
$ zfcd daemontools
$ cho tệp trong `zfls`; làm
> zfget $ tệp
$ hoàn thành
$ zfđóng

# Tải lên tất cả các tệp thông thường trong $ HOME / foobar (đệ quy) mới hơn
# hai giờ để ftp.foobar.invalid / path / to / upload
$ autoload -U zfinit; zfinit
$ zfopen ftp.foobar.invalid / path / to / upload
$ cd $ HOME / foobar
$ zfput -r ** / * (. mh-2)
$ zfđóng

# danh sách dài các tệp trên ftp
$ autoload -U zfinit; zfinit
$ zfopen một số máy chủ
$ zfcd / some / remote / Dir
$ cd / some / local / Dir
# Nếu list.txt nằm trên máy chủ từ xa, hãy thay đổi thành
# zfget $ {(f) "$ (zftp get /path/to/remote/list.txt)"}
$ zfget $ {(f) "$ (cat list.txt)"}
$ zfđóng

zsh / zselect (yêu cầu zmodload zsh / zselect)
# Nó tương tự như
, ----
| $ sg = $ (stty -g)
| $ stty -icanon tối thiểu 0 lần 50
| $ đọc yesno
| $ stty "$ sg"
| $ case "$ yesno" trong
| > yes) command1 ;;
| > *) command2 ;;
| > esac
`----
$ zmodload zsh / zselect
$ if zselect -t 500 -r 0 && đọc yesno && [yes = "$ yesno"]; sau đó
> command1
> khác
> command1
> fi

LỰA CHỌN


THÔNG TIN lựa chọn
auto_cd (cho phép một người thay đổi thành một thư mục bằng cách nhập nó như một lệnh). auto_pushd
(tự động nối các dirs vào danh sách push / pop) pushd_ignore_dups (và không trùng lặp
chúng).

Khác
không_hup (không gửi tín hiệu HUP đến các công việc nền khi thoát ZSH). print_exit_value (buổi bieu diễn
thông báo có mã thoát khi một lệnh trả về với mã thoát khác XNUMX)

Lịch Sử lựa chọn
lịch sử_xác minh (cho phép người dùng chỉnh sửa dòng lệnh sau khi mở rộng lịch sử (ví dụ: ls)
thay vì chạy nó ngay lập tức) Sử dụng cùng một tệp lịch sử cho tất cả các phiên: Setopt.
CHIA SẺ_HISTORY

Quyền riêng tư / Bảo mật
no_clobber (hoặc đặt -C; ngăn chặn > chuyển hướng từ việc cắt ngắn tệp đã cho nếu nó
đã tồn tại)

chính tả sửa chữa
sửa chữa (tự động sửa lỗi chính tả của lệnh). đúng_tất cả (tự động
sửa lỗi chính tả của từng từ trên dòng lệnh) dvorak (bố cục dvorak)

UNSORTED / MISC


Đường dẫn thư: nhiều đường dẫn thư đơn giản:

mailpath = ($ HOME / Mail / mbox '? mail mới trong mbox'
$ HOME / Mail / tux.u-strasbg '? Thư mới trong tux'
$ HOME / Mail / lilo '? Thư mới trong lilo'
$ HOME / Mail / ldap-fr '? Thư mới trong ldap-fr')

Đường dẫn thư: đường dẫn thư động:

sắp chữ-một đường dẫn thư
cho tôi trong ~ / Thư / Danh sách /* (.); làm
mailpath [$ # mailpath + 1] = "$ {i}? Bạn có thư mới trong $ {i: t}."
thực hiện

Tránh nhấp vào các lệnh đặc biệt:

cho com trong bí danh expr tìm mattrib mcopy mdir mdel mà;
bí danh $ com = "noglob $ com"

Để di chuyển bashprompt của bạn sang zsh, hãy sử dụng tập lệnh bash2zshprompt nằm trong zsh
nguồn phân phối theo Khác.

Để di chuyển từ (t) csh sang zsh, hãy sử dụng công cụ c2z để chuyển đổi bí danh csh và
môi trường và biến shell thành zsh. Nó thực hiện điều này bằng cách chạy csh và có báo cáo csh
trên bí danh và biến. Sau đó, tập lệnh chuyển đổi chúng thành các tệp khởi động zsh. Nó có một số
các vấn đề và thông tin sử dụng được ghi lại ở đầu tập lệnh này.

Dưới đây là các chức năng để đặt tiêu đề và trạng thái cứng của một Xì trum hoặc của GNU Màn đến zsh
thư mục hiện tại, tương ứng, khi lời nhắc được hiển thị và tên lệnh
và phần còn lại của dòng lệnh, tương ứng, khi một lệnh được thực thi:

chức danh {
if [[$ TERM == "màn hình"]]; sau đó
# Sử dụng hai cái này cho GNU Screen:
print -nR $ '33k' $ 1 $ '33' \
print -nR $ '33] 0;' $ 2 $ ''
elif [[$ TERM == "xterm" || $ TERM == "rxvt"]]; sau đó
# Sử dụng cái này thay thế cho XTerms:
print -nR $ '33] 0;' $ * $ ''
fi
}
function precmd {title zsh "$ PWD"}
hàm preexec {
mô phỏng -L zsh
địa phương -a cmd; cmd = ($ {(z) 1})
tiêu đề $ cmd [1]: t "$ cmd [2, -1]"
}

Đặt dòng sau vào của bạn ~ / .screenrc để xem hardstatus lạ mắt này:

chú thích luôn là "% 3n% t%? (% u)%?% ?:% h%?"

Các biến đặc biệt được gán:

$ LINENO $ NGẪU NHIÊN $ SECONDS $ COLUMNS $ HISTCHARS $ UID
$ EUID $ GID $ EGID $ USERNAME $ fignore $ mailpath $ cdpath

LIÊN KẾT


Trang chính

http://www.zsh.org/

Trang dự án

http://sourceforge.net/projects/zsh/

Trang shell Z tại Sunsite.dk

http://zsh.sunsite.dk/

Từ Bash to Z Shell: Chinh phục Dòng lệnh - cuốn sách

http://www.bash2zsh.com/

"Zsh - die magische Shell" (sách tiếng Đức về Zsh) của Sven Guckes và Julius Plenz

http://zshbuch.org/

Danh sách gửi thư

http://www.zsh.org/mla/

ZSH-Hỏi đáp

http://zsh.dotsrc.org/FAQ/

hướng dẫn sử dụng

http://zsh.sunsite.dk/Guide/

ZSH-Wiki

http://zshwiki.org/home/

Một đoạn giới thiệu ngắn từ BYU

http://docs.cs.byu.edu/linux/advanced/zsh.html

Hỗ trợ chuột;)

http://stchaz.free.fr/mouse.zsh

Curtains up: giới thiệu Z shell

http://www-128.ibm.com/developerworks/linux/library/l-z.html? dwzone = linux

ZSH-Liebhaberseite (tiếng Đức)

http://michael-prokop.at/computer/tools_zsh_liebhaber.html

ZSH-Seite von Michael Prokop (tiếng Đức)

http://michael-prokop.at/computer/tools_zsh.html

Giới thiệu ZSH Prompt

http://aperiodic.net/phil/prompt/

Trang ZSH của Adam

http://www.adamspiers.org/computing/zsh/

Zzappers Mẹo hay nhất của ZSH

http://www.rayninfo.co.uk/tips/zshtips.html

Trang web Zsh của Christian Schneider

http://www.strcat.de/zsh/

Trang web những người yêu thích zsh

http://grml.org/zsh/

Kênh IRC

#zsh at irc.freenode.org

Thẻ tham chiếu Z shell (bao gồm trong gói debian zsh-loves)

http://www.bash2zsh.com/zsh_refcard/refcard.pdf

TÁC GIẢ


Trang này được viết bởi Michael Prokop, Christian strcat Schneider và Matthias
Kopfermann. Nhưng nhiều ý tưởng đã được lấy từ zsh-geeks, ví dụ từ zsh-mailinglists
(zsh-người dùng và zsh-worker), google, nhóm tin và zsh-Wiki. Cảm ơn vì sự mát mẻ của bạn và
lời khuyên đáng kinh ngạc. Chúng tôi đã học được nhiều điều từ bạn!

Theo thứ tự bảng chữ cái:

Andrew 'zefram' Main - http://www.fysh.org/~zefram/
Barton E. Schaefer - http://www.well.com/user/barts/
Matthias Kopferman - http://www.infodrom.north.de/~matthi/
Oliver Kiddle - http://people.freenet.de/opk/
Paul Falstad - http://www.falstad.com/
Peter Stephenson - http://homepage.ntlworld.com/p.w.stephenson/
Richard Coleman
Stephane Chazela - http://stephane.chazelas.free.fr/
Sven Gucks - http://www.guckes.net/
Sven Wischnowsky - http://w9y.de/zsh/zshrc

Sử dụng zsh-những người yêu thích trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad




×
quảng cáo
❤️Mua sắm, đặt phòng hoặc mua tại đây — không mất phí, giúp duy trì các dịch vụ miễn phí.