GoGPT Best VPN GoSearch

OnWorks favicon

zsh-lovers - Online sa Cloud

Patakbuhin ang mga zsh-lover sa OnWorks na libreng hosting provider sa Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

Ito ang command na zsh-lovers na maaaring patakbuhin sa OnWorks free hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

PROGRAMA:

NAME


zsh-lovers - mga tip, trick at halimbawa para sa Z shell

SINOPSIS


Basahin mo na lang. ;-)

PANGKALAHATANG-IDEYA


Sa tuwing titingnan natin ang zsh manual nagtataka tayo kung bakit walang mga halimbawa o mga simpleng iyon
mga bagay sa (shell) buhay. Ang zsh ay naglalaman ng maraming mga tampok, ngunit walang manpage na may ilan
mga halimbawa (tulad ng procmalex(5)). Iyon ang dahilan kung bakit isinulat namin ang manpage na ito.

Karamihan sa mga trick at oneliner ay nagmula sa mga mailinglist na zsh-users, zsh-workers, google,
mga newsgroup at mula sa ating sarili. Tingnan ang seksyon Links para sa mga detalye.

Tandaan: Ang manpage na ito (zsh-lovers(1)) ay hindi isang opisyal na bahagi ng Z shell! Ito ay isang makatarungan
para masaya - manpage ;) Para sa mga komento, ulat ng bug at feedback, tingnan kaagad ang
seksyon TUMBOK.

SHELL-SCRIPTING


Ang seksyong ito ay nagbibigay ng ilang halimbawa para sa madalas na kailangan ng shellscript-stuff. Pansinin mo na
hindi dapat gumamit kung hindi, karamihan sa mga halimbawa ay hindi gagana. I-parse ang mga opsyon sa mga shellscript. Halimbawa
kinuha mula sa ZWS ni Adam Chodorowski (http://www.chodorowski.com/projects/zws/):

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

zparseopts -K -- p:=o_port r:=o_root l:=o_log h=o_help
kung [[ $? != 0 || "$o_help" !="" ]]; pagkatapos
echo Paggamit: $(basename "$0") "[-p PORT] [-r DIRECTORY]"
labasan 1
fi

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

kung [[ $root[1] != '/' ]]; pagkatapos ay root="$PWD/$root"; fi
}
# ngayon gamitin ang function:
parse_options $*

HALIMBAWA


Ang mga available na subsection ay Aliases, pagtatapos, Unsorted/Misc halimbawa, (Recursive)
Globbing - Mga halimbawa, Mga Modifier paggamit, Pag-redirect-Mga Halimbawa, ZMV-Mga Halimbawa at
Module-Mga Halimbawa.

MGA ALIASE
Ang mga suffix alias ay sinusuportahan sa zsh mula noong bersyon 4.2.0. Ilang halimbawa:

alias -s tex=vim
alias -s html=w3m
alias -s org=w3m

Ngayon ay pinindot ang return-key pagkatapos makapasok foobar.tex nagsisimula ang vim sa foobar.tex. Pagtawag a
Ang html-file ay nagpapatakbo ng browser w3m. www.zsh.org at ang pagpindot sa enter ay magsisimula sa w3m na may argumento
www.zsh.org. Maaaring gamitin ang mga pandaigdigang alias saanman sa command line. Halimbawa:

$ alias -g C='| wc -l'
$ grep alias ~/.zsh/* c
443

Ilang mas marami o hindi gaanong kapaki-pakinabang na mga pandaigdigang alias (piliin kung kapaki-pakinabang ang mga ito o hindi para sa iyo sa
iyong sarili):

alias -g ...='../..'
alias -g ....='../../..'
alias -g .....='../../../..'
alias -g CA="2>&1 | pusa -A"
alias -g C='| wc -l'
alias -g D="DISPLAY=:0.0"
alias -g DN=/dev/null
alias -g ED="export DISPLAY=:0.0"
alias -g EG='|& egrep'
alias -g EH='|& ulo'
alias -g EL='|& less'
alias -g ELS='|& mas kaunti -S'
alias -g ETL='|& buntot -20'
alias -g ET='|& buntot'
alias -g F=' | fmt -'
alias -g G='| egrep'
alias -g H='| ulo'
alias -g HL='|& ulo -20'
alias -g Sk="*~(*.bz2|*.gz|*.tgz|*.zip|*.z)"
alias -g LL="2>&1 | mas kaunti"
alias -g L="| mas kaunti"
alias -g LS='| mas kaunti -S'
alias -g MM='| karamihan'
alias -g M='| higit pa'
alias -g NE="2> /dev/null"
alias -g NS='| uri -n'
alias -g NUL="> /dev/null 2>&1"
alias -g PIPE='|'
alias -g R=' > /c/aaa/tee.txt '
alias -g RNS='| sort -nr'
alias -g S='| uri'
alias -g TL='| buntot -20'
alias -g T='| buntot'
alias -g US='| uri -u'
alias -g VM=/var/log/messages
alias -g X0G='| xargs -0 egrep'
alias -g X0='| xargs -0'
alias -g XG='| xargs egrep'
alias -g X='| xargs'

KOMPLETYON
Tingnan din ang man 1 zshcompctl zshcompsys zshcompwid. Ang zshcompctl ay ang lumang istilo ng zsh
programmable na pagkumpleto, ang zshcompsys ay ang bagong sistema ng pagkumpleto, ang zshcompwid ay ang zsh
mga widget sa pagkumpleto.

Ang ilang mga function, tulad ng _apt at _dpkg, ay napakabagal. Maaari kang gumamit ng cache upang mag-proxy
ang listahan ng mga resulta (tulad ng listahan ng mga available na pakete ng debian) Gumamit ng cache:

zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache

Pigilan ang pagkumpleto ng mga file/direktoryo ng CVS:

zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'

Malabo na pagtutugma ng mga pagkumpleto kapag nagkamali ka ng pag-type sa mga ito:

zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' orihinal lang
zstyle ':completion:*:approximate:*' max-errors 1 numeric

At kung gusto mong tumaas ang bilang ng mga error na pinapayagan ng _approximate sa haba
sa kung ano ang nai-type mo sa ngayon:

zstyle -e ':completion:*:approximate:*' \
max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)'

Huwag pansinin ang mga function ng pagkumpleto para sa mga utos na wala ka:

zstyle ':completion:*:functions' hindi pinansin-patterns '_*'

Sa mga function ng helper tulad ng:

xdvi() { command xdvi ${*:-*.dvi(om[1])} }

maiiwasan mo na kailangang kumpletuhin sa maraming pagkakataon, ngunit kung gagawin mo, baka gusto mo
mahulog kaagad sa pagpili ng menu at upang maiayos ang mga salita ayon sa oras:

zstyle ':completion:*:*:xdvi:*' oo piliin ang menu
zstyle ':completion:*:*:xdvi:*' oras ng pag-uuri ng file

Pagkumpleto ng mga ID ng proseso sa pagpili ng menu:

zstyle ':completion:*:*:kill:*' na menu yes piliin
zstyle ':completion:*:kill:*' force-list palagi

Kung gagamitin mo ang isang direktoryo bilang argumento, aalisin nito ang trailing slash (usefull
sa ln)

zstyle ':completion:*' squeeze-slashes true

Hindi pipiliin ng cd ang direktoryo ng magulang (hal: cd ../ ):

zstyle ':completion:*:cd:*' ignore-parents parent pwd

Isa pang pamamaraan para sa mabilis baguhin mga direktoryo. Idagdag ito sa iyong ~ / .zshrc, tapos pumasok ka lang
“cd ..../dir”

rationalise-dot() {
kung [[ $LBUFFER = *.. ]]; pagkatapos
LBUFFER+=/..
iba
LBUFFER+=.
fi
}
zle -N rationalise-dot
bindkey . rationalise-dot

UNSORTED/MISC halimbawa
Hint: Ang isang listahan ng mga valid na Glob Qualifier ay makikita sa zshexpn(1). Tingnan ang “man 1 zshexpn |
less -p” Qualifiers para sa mga detalye.

# Kunin ang mga pangalan ng lahat ng file na *hindi* tumutugma sa isang pattern *kahit saan* sa
# file (at walang ``-L'' dahil ito ay GNUish)
$ print -rl -- *(.^e{'grep -q pattern $REPLY'})
# o
$ : *(.e{'grep -q pattern $REPLY || print -r -- $REPLY'})

# random na numero
$ echo $[${RANDOM}%1000] # random sa pagitan ng 0-999
$ echo $[${RANDOM}%11+10] # random sa pagitan ng 10-20
$ echo ${(l:3::0:)${RANDOM}} # N digit ang haba (3 digit)

# baligtarin ang isang salita
$ echo "${(j::)${(@Oa)${(s::):-hello}}}"

# Ipakita ang pinakabagong direktoryo
$ ls -ld *(/om[1])

# random na elemento ng array
$ FILES=( .../files/* )
$ feh $FILES[$RANDOM%$#FILES+1]

# cat unang linya sa lahat ng mga file sa dir na ito
$ para sa file (*(ND-.)) IFS= read -re < $file

# pagsubok kung numero ang isang parameter
$ kung [[ $1 == <-> ]] ; pagkatapos
echo numeric
iba
echo non-numeric
fi

# Ipakita sa akin ang lahat ng .c na file kung saan walang .o file.
$ print *.c(e_'[[ ! -e $REPLY:ro ]]'_)

# Lahat ng mga file sa /ay/ na hindi pag-aari ng ugat
$ ls -ld /ay/*(^u:ugat)

# Lahat ng mga file kung saan ang may-ari ay nagbabasa at nagsagawa ng mga pahintulot
$ echo *(f:u+rx:)

# Ang pareho, ngunit ang iba ay walang mga pahintulot sa pagpapatupad
$ echo *(f:u+rx,ox:)

# pagpapalawak ng brace - halimbawa
$ X=(ABC)
$ Y=(+ -)
$ print -r -- $^X.$^Y

A.+ A.- B.+ B.- C.+ C.-
# Kunin ang pinakabagong file na naglalaman ng string na 'fgracg*.log' sa
# filename at naglalaman ng string na 'ORA-' dito
$ file=(fgracg*.log(Nm0om[1]))
$ ($#file)) && grep -l ORA- $file
# walang Zsh
$ files=$( find . -name . -o -prune -name 'fgactg*>log' -mtime 0 -print )
> kung [ -n "$files" ]; pagkatapos
> IFS='
>'
> set -f
> file=$(ls -td $files | head -1)
> grep -l ORA- "$file"
> fi

# panatilihing tumatakbo ang tinukoy na bilang ng mga proseso ng bata hanggang sa matapos ang buong gawain
$ zsh -c 'sleep 1 & sleep 3 & sleep 2& print -rl -- $jobtexts'

# Alisin ang zero na haba at .bak na mga file sa isang direktoryo
$ rm -i *(.L0) *.bak(.)

# mag-print ng mga file na walang mga extension
$ printf '%s\n' ^?*.*
$ printf '%s\n' ^?*.[^.]*(D)
$ ls -d -- ^?*.*(D)

# Paghahanap ng mga file na hindi naglalaman ng isang partikular na string
$ print -rl file* | comm -2 -3 - <(grep -l string file*)'
$ para sa f (file*(N)) grep -q string $f || print -r $f'

# Ipakita/Suriin kung ang isang opsyon ay nakatakda o hindi. Gumagana ito pareho sa $options bilang
# na may $builtins
$ echo $options[tama]
off
$ $options[zle]
on

# Bilangin ang bilang ng mga direktoryo sa stack
$ print $((${${(z)${(f)"$(dirs -v)"}[-1]}[1]} + 1)) # o
$ dirs -v | awk '{n=$1}END{print n+1}'

# Pagtutugma sa lahat ng mga file na walang tuldok sa filename
$ ls *~*.*(.)

# Ipakita lamang ang ip-address mula sa ``ifconfig device''
# ifconfig mula sa net-tools (Linux)
$ print ${${$(LC_ALL=C / sbin / ifconfig eth0)[7]}:gs/addr://}
# ifconfig mula sa 4.2BSD {Free,Net,Open}BSD
$ print ${$(/ sbin / ifconfig tun0)[6]}

# I-ping ang lahat ng mga IP address sa isang pares ng mga klase C o lahat ng mga host
# sa / Etc / host
$ para sa i sa {1..254}; gawin ang ping -c 1 192.168.13.$i; tapos na
or
$ I=1
$ habang ( [[ $I -le 255 ]] ); gawin ang ping -1 2 150.150.150.$I; hayaan ko++; tapos na
or
$ para sa i sa $(sed 's/#.*//' > / Etc / host | awk '{print $2}')
: gawin
: echo "Sinusubukan $i ..."
: ping -c 1 $i ;
: echo '=============================='
: tapos na

# i-load ang lahat ng magagamit na mga module sa pagsisimula
$ typeset -U m
$ m=()
$ para sa md ($module_path) m=($m $md/**/*(*e:'REPLY=${REPLY#$md/}'::r))
$ zmodload -i $m

# Palitan ang pangalan ng lahat ng mga file sa loob ng isang direktoryo upang ang kanilang mga pangalan ay makakuha ng numeral
# prefix sa default na pagkakasunud-sunod ng pag-uuri.
$ i=1; para sa j sa *; gawin mv $j $i.$j; ((i++)); tapos na
$ i=1; para sa f sa *; gawin mv $f $(echo $i | \
awk '{ printf("%03d", $0)}').$f; ((i++)); tapos na
$ integer i=0; para sa f sa *; gawin mv $f $[i+=1].$f; tapos na

# Hanapin (at i-print) ang lahat ng simbolikong link na walang target sa loob ng kasalukuyang
# dirtree.
$ $ file **/*(D@) | nasira ang fgrep
$ para sa i sa **/*(D@); [[ -f $i || -d $i ]] || echo $i
$ echo **/*(@-^./=%p)
$ print -l **/*(-@)

# Ilista ang lahat ng mga plain file na walang mga extension na nakalista sa `fignore'
$ ls **/*~*(${~${(j/|/)fignore}})(.)
# tingnan sa itaas, ngunit ngayon alisin ang mga executable
$ ls **/*~*(${~${(j/|/)fignore}})(.^*)

# Mag-print ng mga file na walang mga extension (nangangailangan ng *setopt extendedglob*
# at *setopt dotglob*)
$ printf '%s\n' ^?*.*

# Listahan ng mga file sa reverse order na pinagsunod-sunod ayon sa pangalan
$ print -rl -- *(Naka-on)
or
$ print -rl -- *(^on)

# Synonymic sa ``ps ax | awk '{print $1}'''
$ print -l /proc/*/cwd(:h:t:s/self//)

# Kunin ang PID ng isang proseso (nang walang ``ps'', ``sed'', ``pgrep'', ..
# (sa ilalim ng Linux)
$ pid2 () {
> lokal i
> para pumasok ako /proc/<->/stat
> gawin
> [[ "$(< $i)" = *\((${(j:|:)~@})\)* ]] && echo $i:h:t
> tapos na
> }

# para sa X sa 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y'; gawin...
$ para sa (( i = 36#n; i <= 36#y; i++ )); gawin
> print ${$(([##36]i)):l}
> tapos na
# o kasama ng ``dc''
$ print {$((##n))..$((##y))}P\ 10P | dc
# o may ``eval''
$ eval print '${$(([##36]'{$((36#n))..$((36#y))}')):l}'

# foreach sa isang linya ng shell
$ para sa f (*) print -r -- $f

# kopyahin ang isang direktoryo nang paulit-ulit na walang data/mga file
$ dirs=(**/*(/))
$ cd -- $dest_root
$ mkdir -p -- $dirs
# o walang zsh
$ hanapin . -type d -exec env d="$dest_root" \
sh -c ' exec mkdir -p -- "$d/$1"' '{}' '{}' \;

# Kung `foo=23'', pagkatapos ay i-print na may 10 digit na may nangunguna na '0'.
$ foo=23
$ print ${(r:10::0:)foo}

# hanapin ang pangalan ng lahat ng mga file sa kanilang home directory na mayroon
# higit sa 20 character sa kanilang mga pangalan ng file
print -rl $HOME/${(l:20::?:)~:-}*

# I-save ang mga array
$ print -r -- ${(qq)m} > $nameoffile # i-save ito
$ eval "m=($(cat -- $nameoffile)" # o gamitin
$ m=("${(@Q)${(z)"$(cat -- $nameoffile)"}}") # para ibalik ito

# makakuha ng "ls -l" sa lahat ng mga file sa puno na mas bata sa a
# na tinukoy na edad (hal. "ls -l" lahat ng mga file sa puno na kung saan
# binago sa nakalipas na 2 araw)
$ ls -tld **/*(m-2)
# Bibigyan ka nito ng listahan ng 1 file perl line (hindi à la ls -R).
# Mag-isip ng madaling paraan para magkaroon ng "ls -R" na istilong output na may
# lamang ng mga file na mas bago sa 2 araw na gulang.
$ para sa d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Nm-2))
> ($#l)) && ls -ltd -- $l
> cd ~-
> }
> }
# Kung gusto mo ring maisama ang mga direktoryo kahit na ang kanilang mtime
# ay higit sa 2 araw na:
$ para sa d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(N/,m-2))
> ($#l)) && ls -ltd -- $l
> cd ~-
> }
> }
# At kung gusto mo lamang ang mga direktoryo na may mtime < 2 araw ang mailista:
$ para sa d (. ./**/*(N/m-2)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Nm-2))
> ($#l)) && ls -ltd -- $l
> cd ~-
> }
> }

# print 42 ``-''
$ echo ${(l:42::-:)}
# o gumamit ng ``$COLUMS''
$ echo ${(l:$COLUMNS::-:)}
# at ngayon ay may mga kulay (nangangailangan ng mga kulay ng autoload ; mga kulay)
$ echo "$bg[pula]$fg[black]${(l:42::-:)}"

# I-redirect ang STDERR sa isang command tulad ng xless nang hindi rin nire-redirect ang STDOUT.
$foo 2>>(xless)
# ngunit ito ay nagpapatupad ng command nang asynchronously. Upang gawin ito nang sabay-sabay:
$ { { foo 1>&3 } 2>&1 | xless } 3>&1

# Palitan ang pangalan ng lahat ng MP3-File mula sa pangalang may spaces.mp3 patungong Name With Spaces.mp3
$ para sa i sa *.mp3; gawin
> mv $i ${${(C)i}:s/Mp3/mp3/}
> tapos na

# Itugma ang mga pangalan ng file na naglalaman lamang ng mga digit at nagtatapos sa .xml (nangangailangan
# *setopt kshglob*)
$ ls -l [0-9]##.xml
$ ls -l <0->.xml

# Alisin ang lahat ng "non txt" na file
$ rm ./^*.txt

# Ilipat ang 200 mga file mula sa isang direktoryo patungo sa isa pa
$ mv -- *([1,200]) /isa pa/Dir

# I-convert ang mga larawan (foo.gif => foo.png):
$ para sa i sa **/*.gif; i-convert ang $i $i:r.png

# i-convert ang isang koleksyon ng mga mp3 file sa wave o cdr,
# hal file.wav -> file.mp3)
$ para sa i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}

# I-download gamit ang LaTeX2HTML na nilikhang Mga File (halimbawa ang ZSH-Guide):
$ para sa f in http://zsh.sunsite.dk/Guide/zshguide{,{01..08}}.html; gawin
> lynx -source $f >${f:t}
> tapos na

# Ilipat ang lahat ng mga file sa dir1 at dir2 na may mga bilang ng linya na higit sa 10 hanggang
# isa pang direktoryo na nagsasabing "/more10"
$ mv dir[12]/**/*.cr(-.e{'((`wc -l < ​​$REPLY` > 10))'}) /more10

# Gumawa gamit ang dpkg ng master-list ng bawat file na na-install nito
$ diff <(hanapin / | sort) <(cat /var/lib/dpkg/info/*.listahan | uri)

# Palitan ang nakakatuwang Escape-Sequences na ito:
$ autoload na mga kulay ; mga kulay
$ print "$bg[cyan]$fg[blue]Isa kang tulala" >> /dev/pts/3

# Kumuha ng halaga ng ASCII ng isang character
$ char=N ; print $((#char))

# Filename "Erweiterung"
# Tandaan: Sinasabi ng (N) na gamitin ang opsyong nullglob para sa partikular na ito
# pattern ng glob.
$ para sa i sa *.o(N); gawin
> rm $i
> tapos na

# Palitan ang pangalan ng mga file; ie FOO sa foo at bar sa BAR
$ para sa i sa *(.); mv $i ${i:l} # `FOO' hanggang `foo'
$ para sa i sa *(.); mv $i ${i:u} # `bar sa `BAR'

# Ipakita ang lahat ng suid-file sa $PATH
$ ls -latg ${(s.:.)PATH} | grep '^...s'
# o mas kumplikado ;)
$ print -l ${^path}/*(Ns,S)
# o ipakita lamang ang mga executable na may ibinigay na pattern ng user
$ print -l ${^path}/*vim*(*N)

# gzip file kapag naglalaman ng isang partikular na string
$ gzip ${(ps:\0:)"$(grep -lZ foobar ./*.txt(.))"}

# Isang maliit na one-liner, na nagbabasa mula sa stdin at nagpi-print hanggang sa stdout ang una
# unique line ibig sabihin ay hindi nagpi-print ng mga linyang na-print na dati
# (ito ay katulad ng natatanging utos, ngunit ang natatangi ay maaari lamang hawakan
# katabing linya).
$ IFS=$'\n\n'; print -rl -- ${(Oau)${(Oa)$(cat file;echo .)[1,-2]}}

# Naglilista ng bawat executable sa PATH
$ print -l ${^path}/*(-*N)

# Itugma ang lahat ng .c na file sa lahat ng mga subdirectory, _maliban_ sa anumang mga subdirectory ng SCCS?
$ ls **/*.c~(*/)#SCCS/*

# Ilista ang lahat ng `README' - mga file na case-insensitive na may max. isang typo
$ ls **/*(#ia2)readme

# case insensitive na pagsuri para sa mga variable
$ kung [[ $OSTYPE == (#i)LINUX*(#I) ]]; pagkatapos
> echo "Nakasakay si Penguin."
> iba pa
> echo "Hindi isang Linux."
> fi

(Recursive) Globbing - Mga halimbawa
Ang isang listahan ng mga wastong glob Qualifier ay makikita sa zshexpnNa (1). tandaan: **/ ay katumbas ng
(*/)#! Halimbawa:

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

# Maghanap ng `README' sa lahat ng Subdirectory
$ ls -l **/README

# maghanap ng mga direktoryo na naglalaman ng parehong "index.php" at "index.html", o sa
# pangkalahatan, mga direktoryo na naglalaman ng higit sa isang file na tumutugma sa "index.*"
$ ls **/*(D/e:'[[ -e $REPLY/index.php && -e $REPLY/index.html ]]':)
# o
$ ls **/*(D/e:'l=($REPLY/index.*(N));(($#l >= 2 ))':)

# Maghanap ng utos upang maghanap para sa pangalan ng direktoryo sa halip na basename
$ print -rl /**/*~^*/path(|/*)
# o - walang Zsh
$ mahanap / | grep -e /path/ -e '/path$'

# I-print ang landas ng mga direktoryo na may hawak na sampung pinakamalaking C regular na mga file
# sa kasalukuyang direktoryo at mga subdirectory.
$ print -rl -- **/*.c(D.OL[1,10]:h) | uri -u

# Maghanap ng mga file na may sukat == 0 at magpadala ng mail
$ file=(**/*(ND.L0m+0m-2))
> (( $#files > 0 )) && print -rl -- $files | \
mailx -s "mga walang laman na file" [protektado ng email]

# recursive chmod
$ chmod 700 **/(.) # Mga file lamang
$ chmod 700 **/(/) # Mga direktoryo lamang

# i-print ang lahat ng mga file sa direktoryo na iyon sa 2 column
$ print -rC2 -- ${1:[...]}/*(D:t)
# ^- number ob column
# o - kung nababahala ka tungkol sa mga espesyal na character - gamitin
$ list=(${1:[...]}/*(ND:t))
$ ($#list)) && print -rC2 -- ${(V)list}

# Hanapin ang lahat ng mga file sa / home /*/*-mail/ na may setting na ``chmod -s'' flag
# (recursive, isama ang mga dotfile) alisin ang setgid/setuid flag at i-print
# isang mensahe
$ chmod -s / home /*/*-mail(DNs,S) / home /*/*-mail/**/*(DNs,S))
# o may maliit na script
$ para sa file (/ home /*/*-mail(DNs,S) / home /*/*-mail/**/*(DNs,S)) {
> print -r -- $file
> chmod -s $file && print -r fixed $file
> }
# o gumamit ng ``zargs'' (nangangailangan ng autoload zargs) pigilan din ang arg list
# mahabang error
$ zargs / home /*/*-mail(DNs,S) / home /*/*-mail/**/*(DNs,S)) -- chmod -s

# Listahan ng mga file na nagsisimula sa `foo23' pataas (foo23, foo24, foo25, ..)
$ ls -l foo<23->

# makuha ang lahat ng file na nagsisimula sa mga string ng petsa mula Hunyo 4 hanggang
# Hunyo 9 ng 2004
$ ls -l 200406{04..10}*(N)
# o kung sila ay nasa anyong 200406XX (nangangailangan ng ``setopt extended_glob''
$ ls -l 200306<4-10>.*

# alisin ang mga puwang sa mga filename
$ para sa isang sa ./**/*\ *(Dod); gawin ang mv $a ${a:h}/${a:t:gs/ /_}; tapos na

# Ipakita lamang ang lahat ng *.c at *.h - Mga File
$ ls -l *.(c|h)

# Ipakita lamang ang lahat ng *.c - mga file at huwag pansinin ang `foo.c'
$ ls *.c~foo.c

# ipakita ang data sa *talagang* binary na format
$ zsh -ec 'habang {} {printf %.8x $n;ulitin 8 \
> {read -ku0 a printf \ %.8d $(([##2]#a))};print;((n+=8))}' < binary

# Ipakita lamang ang mga file na nababasa sa mundo
$ ls -l *(R)

# Ang mga file ng listahan sa kasalukuyang direktoryo ay hindi maisusulat ng may-ari
$ print -l ~/*(ND.^w)

# hanapin at tanggalin ang mga file na mas luma kaysa sa ibinigay na parameter
# (segundo/minuto/oras)
# tinatanggal ang lahat ng regular na file sa /Dir na mas matanda sa 3 oras
$ rm -f /Dir/**/*(.mh+3)
# tinatanggal ang lahat ng symlink sa /Dir na mas matanda sa 3 minuto
$ rm -f /Dir/**/*(@mm+3)
# tinatanggal ang lahat ng hindi dir sa /Dir na mas matanda sa 30 segundo
$ rm -f /Dir/**/*(ms+30^/)
# tinatanggal ang lahat ng mga folder, sub-folder at mga file na mas matanda sa isang oras
$ rm ./**/*(.Dmh+1,.DL0)
# tinatanggal ang lahat ng mga file na higit sa 6 na oras ang edad
$ rm -f **/*(mh+6)
# inaalis ang lahat ng mga file ngunit ang sampung mas bago (tanggalin ang lahat maliban sa huling 10
# na file sa isang direktoryo)
$ rm ./*(Om[1,-11])
Tandaan: Kung masyadong mahaba ang iyong listahan ng arg, gagamitin mo ang builtin rm. Para sa
halimbawa:
$ zmodload zsh/files ; rm -f **/*(mh+6)
o gamitin ang zargs function:
$ autoload zargs ; zargs **/*(mh+6) -- rm -f

# Isang User's Guide sa Z-Shell /5.9: Filename Generation at Pattern
# Ang pagtutugma ay hanapin ang lahat ng mga file sa lahat ng mga subdirectory, paghahanap nang pabalik-balik,
# na may ibinigay na pangalan, case insensitive, ay hindi bababa sa 50 KB ang laki,
# hindi hihigit sa isang linggong gulang at pagmamay-ari ng root user, at pinahihintulutan
# sa isang error sa spelling ng pangalan. Sa katunayan, ang kinakailangan
# expression ay ganito ang hitsura:
$ ls **/(#ia1)pangalan(LK+50mw-1u0)

# Baguhin ang UID mula 102 hanggang 666
$ chown 666 **/*(u102)

# Ilista ang lahat ng mga file na hindi na-update mula noong nakaraang 10 oras
$ print -rl -- *(Dmh+10^/)

# tanggalin lamang ang pinakalumang file sa isang direktoryo
$ rm ./*filename*(Om[1])

# Pagbukud-bukurin ang output mula sa `ls -l' ayon sa laki ng file
$ ls -fld *(OL)

# hanapin ang pinakabagong file sa isang direktoryo
$ setopt dotglob ; direktoryo ng pag-print/**/*(om[1])

# Ipakita lamang ang mga walang laman na file kung saan o `grupo' o `masusulat sa mundo'
$ ls *(L0f.go-w.)

# Hanapin - at ilista - ang sampung pinakabagong mga file sa mga direktoryo at subdir.
# (recursive)
$ print -rl -- **/*(Dom[1,10])

# Mag-print lamang ng 5 linya gamit ang command na "ls" (tulad ng ``ls -laS | head -n 5'').
$ ls -fl *(DOL[1,5])

# Ipakita ang 5-10 huling binagong mga file.
$ print -rl -- /path/to/dir/**/*(D.om[5,10])

# Hanapin ang lahat ng mga file na walang wastong may-ari.
$ chmod someuser /**/*(D^u:${(j.:u:.)${(f)"$(/ etc / passwd)"}%%:*}:)

# Hanapin ang lahat ng walang laman na direktoryo sa isang puno.
$ para sa f sa ***/*(/l2); gawin foo=($f/*(N)); [[ -z $foo ]] && print $f; tapos na
# Tandaan: Dahil ang Zsh 4.2.1 ang glob qualifier F ay nagsasaad ng hindi walang laman na direktoryo.
# Samakatuwid *(F) ay nagpapahiwatig ng lahat ng mga subdirectory na may mga entry, *(/^F) ay nangangahulugang lahat
# subdirectory na walang mga entry.
$ ls -ld *(/^F)

# Alisin ang mga walang laman na direktoryo pagkatapos.
$ rmdir ./**/*(/od) 2> /dev/null

# Ipakita lamang ang mga file na pag-aari ng pangkat na `mga user'.
$ ls -l *(G[mga gumagamit])

Mga Modifier paggamit
Ang mga modifier ay isang makapangyarihang mekanismo na nagbibigay-daan sa iyong baguhin ang mga resulta na ibinalik ayon sa parameter,
filename at pagpapalawak ng kasaysayan. Tingnan mo zshexpn(1) para sa mga detalye.

# TANDAAN: Kailangan ng Zsh 4.3.4!
$ autoload -U edad
# file ang binago ngayon
$ print *(e:edad ngayon ngayon:)
# file ang binago simula 5 pm
$ print *(e-edad 17:00 ngayon-)
# ... simula 5 o'clock kahapon
$ print *(e-age kahapon, 17:00 ngayon-)
# ... mula noong nakaraang Pasko bago ngayon
$ print *(e-age 2006/12/25 ngayon-)
# ... bago kahapon
$ print *(e-age 1970/01/01 kahapon-)
# lahat ng mga file ay binago sa pagitan ng pagsisimula ng mga petsang iyon
$ print *(e:edad 2006/10/04 2006/10/09:)
# lahat ng mga file ay binago sa petsang iyon
$ print *(e:edad 2006/10/04:)
# Mga oras ng supply.
$ print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)

# Mag-alis ng sumusunod na bahagi ng pathname, na iniiwan ang ulo. Ito ay gumagana tulad ng
# `dirname'.
$ echo =ls(:h)
/ bin

# Alisin ang lahat ng nangungunang bahagi ng pathname, na umaalis sa buntot. Gumagana ito
# tulad ng `basename'.
$ echo =ls(:t)
ls

# Alisin ang suffix mula sa bawat file (*.sh sa halimbawang ito)
$f:e ay $f file extension
:h --> ulo (dirname)
:t --> buntot (basename)
:r -> pahinga (inalis ang extension)
$ para sa f (*.sh) mv $f $f:r

# Alisin ang extension ng filename ng form na `.xxx', na iniiwan ang root name.
$ echo $PWD
/usr/src/linux
$ echo $PWD:t
linux

# Alisin ang lahat maliban sa extension.
$ foo=23.42
$ echo $foo
23.42
$ echo $foo:e
42

# I-print ang bagong command ngunit huwag isagawa ito. Gumagana lamang sa kasaysayan
# pagpapalawak.
$ echo =ls(:h)
/ bin
$ !echo:p
$ echo =ls(:h)

# Sipiin ang mga pinalit na salita, na tinatakasan ang mga karagdagang pagpapalit.
$ bar="23'42"
$ echo $bar
23'42
$ echo $bar:q
23 \ '42

# I-convert ang mga salita sa lahat ng maliliit na titik.
$ bar=FOOBAR
$ echo $bar
FOOBAR
$ echo $bar:l
foobar

# I-convert ang mga salita sa lahat ng uppercase.
$bar=foobar
$ echo $bar
foobar
$ echo $bar:u
FOOBAR

# i-convert ang 1st char ng isang salita sa uppercase
$foo="isa dalawa tatlo apat"
$ print -r -- "${(C)foo}"
Isa dalawa tatlo apat

Pag-redirect-Mga Halimbawa
Tingnan zshmisc(1) para sa higit pang impormasyon (o mas mababa ${^fpath}/zmv(N))

# Idagdag ang `exit 1' sa dulo ng lahat ng *.sh - file
$ echo "exit 1" >> *.sh

# pagdaragdag ng mga file sa foobar.tar.gz
$ eval set =(gunzip < foobar.tar.gz) '
tar rf $1 additional.txt &&gzip < $1 > foobar.tar.gz'

# I-redirect ang output sa isang file AT display sa screen
$ foobar >&1 > file1 > file2 > ..

# pipe solong output sa maraming input
$ zcat foobar.Z >> (gzip -9 > file1.gz) \
>> (bzip2 -9 > file1.bz2) \
>> (acb --best > file1.acb)

# Idugtong / etc / services sa dulo ng file na `foo' at `bar'
$ pusa / etc / services >> foo >> bar

# Pipe STDERR
$ echo Isang error >&2 2>&1 | sed -e 's/A/I/'

# magpadala ng karaniwang output ng isang proseso sa karaniwang input ng ilang mga proseso
# nasa pipeline
$ setopt multios
$proseso1 > >(proseso1) > >(proseso2)

# pagsisimula ng variable at sabay na pinapanatili ang output ng terminal
$ setopt multios
$ { a=$(command >&1 >& 3 3 > &- 2>&1);} 3>&1

# redirect stderr dalawang beses
$ setopt multios ; program 2> file2> file1 2>&1

# Pagdodoble ng stdout at stderr sa isang logfile
$ exec 3>&1 > logfile 2>&2 2>&1 >&3 3>&-

# redirect stderr (lamang) sa isang file at sa orig. stderr:
$ utos 2>&2 2>stderr
# redirect stderr at stdout sa paghiwalayin ang mga file at pareho sa orig. stdout:
$ command 2>&1 1>&1 2>stderr 1>stdout
# redirect stderr at stdout sa paghiwalayin ang mga file at stdout sa orig. stdout
# AT stderr sa orig. stderr:
$ command 2>&2 1>&1 2>stderr 1>stdout

# Mas masaya kasama ang STDERR ;)
$ ./my-script.sh 2> >(grep -v moron >error.log)|process-output >output.log
$ echo "Thats STDOUT" >>(sed 's/stdout/isa pang halimbawa/' > foobar)

ZMV-Mga Halimbawa (kailangan autoload zmv)
tandaan: -n ibig sabihin walang execution (print lang kung ano ang mangyayari). Sa

# Alisin ang mga ilegal na character sa isang fat32 file system. Ang mga iligal na karakter ay
# / : ; * ? " < > |
# TANDAAN: Ang ``-Q'' at (D) ay isama ang mga nakatagong file.
$ unwanted='[:;*?\"<>|]'
$ zmv -Q "(**/)(*$~unwanted*)(D)" '$1${2//$~unwanted/}'

# Pagpapalit ng bahagi ng isang filename (ibig sabihin "file-hell.name" -> "file-heaven.name")
$ zmv '(*)hell(*)' '${1}langit${2}'
# o
$ zmv '*' '$f:s/hell/heaven/'

# alisin ang bilog na bracket sa loob ng mga filename
# ie foo-(bar).avi -> foo-bar.avi
$ zmv '*' '${f//[()]/}'

# serially lahat ng file (foo.foo > 1.foo, fnord.foo > 2.foo, ..)
$ autoload zmv
$ls*
1.c asd.foo bla.foo fnord.foo foo.fnord foo.foo
$ c=1 zmv '*.foo' '$((c++)).foo'
$ls*
1.c 1.foo 2.foo 3.foo 4.foo foo.fnord

# Palitan ang pangalan ng "file.with.many.dots.txt" sa pamamagitan ng pagpapalit ng mga tuldok (hindi kasama sa huling
# isa!) na may espasyo
$ touch {1..20}-file.with.many.dots.txt
$ zmv '(*.*)(.*)' '${1//./ }$2'

# Alisin ang unang 4 na karakter mula sa isang filename
$ zmv -n '*' '$f[5,-1]' # TANDAAN: Ang "5" ay HINDI pagkakamali sa pagsulat!

# Palitan ang pangalan ng lahat ng mga file sa ilalim ng kasalukuyang Dir sa lower case, ngunit panatilihin
# dinames as-is.
$ zmv -Qv '(**/)(*)(.D)' '$1${(L)2}'

# palitan ang lahat ng ika-4 na character, na "1", ng "2" at iba pa
$ autoload -U zmv
$ zmv '(???)1(???[1-4].txt)' '${1}2${2}'

# Alisin ang unang 15 character mula sa isang string
$ touch 111111111111111{az}
$ autoload zmv
$ zmv '*' '$f[16,-1]'

# Palitan ang mga puwang (anumang bilang ng mga ito) ng isang solong gitling sa mga pangalan ng file
$ autoload zmv
$ zmv -n '(**/)(* *)' '$1${2//( #-## #| ##)/-}'
# o - kasama si Bash
$ hanapin . -depth -name '* *' -exec bash -c '
> shopt -s extglob
> file=$1
> dir=${file%/*}
> name=${file##*/}
> newname=${name//*([ -]) *([ -])/-}
> mv -i -- "$file" "$Dir/$newname"' {} {} \;

# Linisin ang mga pangalan ng file at alisin ang mga espesyal na character
$ autoload zmv
$ zmv -n '(**/)(*)' '$1${2//[^A-Za-z0-9._]/_}'

# Magdagdag ng *.py sa isang grupo ng mga script ng python sa isang direktoryo (nagtatapos ang ilan sa mga ito
# sa *.py at bigyan silang lahat ng tamang extension
$ autoload zmv
$ zmv -n '(**/)(con*)(#qe,file $REPLY | grep "python script",)' '$1$2.py'

# lowercase lahat ng extension (ibig sabihin *.JPG) kasama. mga subfolder
$ autoload zmv
$ zmv '(**/)(*).(#i)jpg' '$1$2.jpg'
# O - walang Zsh
$ find Dir -name '*.[jJ][pP][gG]' -print | habang nagbabasa f
> gawin
> kaso $f sa
> *.jpg);
> *) mv "$f" "${f%.*}.jpg" loading="lazy" ;
> esac
> tapos na

# alisin ang mga nangungunang zero sa extension ng file
$ autoload zmv
$ls
filename.001 filename.003 filename.005 filename.007 filename.009
filename.002 filename.004 filename.006 filename.008 filename.010
$ zmv '(filename.)0##(?*)' '$1$2'
$ls
filename.1 filename.10 filename.2 filename.3 filename.4 filename.5 ..

# palitan ang numero ng mga file.
$ autoload zmv
$ls*
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'
$ls*
foo_10.jpg foo_11.jpg foo_3.jpg foo_4.jpg foo_5.jpg ...

# pagdaragdag ng mga nangungunang zero sa isang filename (1.jpg -> 001.jpg, ..
$ autoload zmv
$ zmv '(<1->).jpg' '${(l:3::0:)1}.jpg'

# Tingnan sa itaas, ngunit ngayon ay mga file na lang na may filename >= 30 char
$ autoload zmv
$ c=1 zmv "${(l:30-4::?:)}*.foo" '$((c++)).foo'

# Palitan ang mga puwang sa mga filename na may salungguhit
$ autoload zmv
$ zmv '* *' '$f:gs/ /_'

# Baguhin ang suffix mula *.sh hanggang *.pl
$ autoload zmv
$ zmv -W '*.sh' '*.pl'

# Magdagdag ng extension na "".txt" sa lahat ng file sa loob ng ${HOME}
Ang # ``-.'' ay palitan lamang ang pangalan ng mga regular na file o symlink sa mga regular na file,
Ang # ``D'' ay upang palitan din ang pangalan ng mga nakatagong file (dotfiles))
$ autoload zmv
$ zmv -Q '/ home /**/*(D-.)' '$f.txt'
# O upang palitan lamang ang pangalan ng mga file na walang extension:
$ zmv -Q '/ home /**/^?*.*(D-.)' '$f.txt'

# Paulit-ulit na baguhin ang mga filename na may mga character? [ ] / = + < > ; : " , - *
$ autoload zmv
$ chars='[][?=+<>;",*-]'
$ zmv '(**/)(*)' '$1${2//$~chars/%}'

# Pag-alis ng solong quote mula sa mga filename (recursively)
$ autoload zmv
$ zmv -Q "(**/)(*'*)(D)" "\$1\${2//'/}"

# Kapag may dumating na bagong file (pinangalanang file.txt) palitan ang pangalan ng lahat ng file upang
# get (hal. file119.txt nagiging file120.txt, file118.txt nagiging
# file119.txt at iba pa na nagtatapos sa file.txt na nagiging file1.txt
$ autoload zmv
$ zmv -fQ 'file([0-9]##).txt(On)' 'file$(($1 + 1)).txt'

# lowercase/uppercase lahat ng file/directory
$ autoload zmv
$ zmv '(*)' '${(L)1}' # lowercase
$ zmv '(*)' '${(U)1}' # uppercase

# Alisin ang suffix *.c sa lahat ng C-Files
$ autoload zmv
$ zmv '(*).c' '$1'

# Malaking titik lamang ang unang titik ng lahat ng *.mp3 - mga file
$ autoload zmv
$ zmv '([az])(*).mp3' '${(C)1}$2.mp3'

# Kopyahin ang target na `README' sa parehong direktoryo ng bawat `Makefile'
$ autoload zmv
$ zmv -C '(**/)Makefile' '${1}README'

# Pag-alis ng solong quote mula sa mga filename (recursively)
$ autoload zmv
$ zmv -Q "(**/)(*'*)(D)" "\$1\${2//'/}"

# Palitan ang pangalan ng pic1.jpg, pic2.jpg, .. sa pic0001.jpg, pic0002.jpg, ..
$ autoload zmv
$ zmv 'pic(*).jpg' 'pic${(l:4::0:)1}.jpg'
$ zmv '(**/)pic(*).jpg' '$1/pic${(l:4::0:)2}.jpg' # recursively

Module-Mga Halimbawa
Pakibasa zshmodules(1) muna!

zsh/pcre (kailangan zmodload zsh/pcre)
# Kopyahin ang mga file ng isang tiyak na panahon (petsa na ipinahiwatig sa mga filename)
$ zmodload zsh/pcre
$ ls -d -- *(e:'[[ $REPLY -pcre-match pcre-regexp ]]':)
# o
$m() { [[ $1 -pcre-match pcre-regexp ]] }
$ ls -d -- *(+m)

zsh/clone (kailangan zmodload zsh/clone)
# Lumilikha ng forked instance ng kasalukuyang shell ($! ay nakatakda sa zero) at
# execute ``command'' sa /dev/tty8 (para sa halimbawang ito).
$ zmodload zsh/clone
$ clone /dev/tty8 && (($! == 0)) && exec command

zsh/oras ng petsa (kailangan zmodload zsh/datetime)
$ zmodload zsh/datetime
$ alias datereplacement='strftime "%Y-%m-%d" $EPOCHSECONDS'
$ export DATE=`datereplacement`
$ echo $DATE

# strip date mula sa filename
$ $ zmodload zsh/datetime
$ setopt extendedglob
$ touch aaa_bbb_20041212_c.dat eee_fff_20051019_g.dat
$ strftime -s pattern \
'???_???_<0-%Y%m%d>_?.dat' $((EPOCHSECONDS - 365 * 24 * 60 * 60 / 2))
$ print -rl -- $~pattern
aaa_bbb_20041212_c.dat
$ print -rl -- $pattern
???_???_<0-20050815>_?.dat

# Search file size == 0, na ibabatay sa pangalan ng file na naglalaman ng petsa
# kaysa sa petsa ng "huling binago" ng file
$ zmodload -i zsh/datetime
$ strftime -s file "abc_de_%m%d%Y.dat" $((EPOCHSECONDS - 24 * 60 * 60 ))
$ file=(**/$file(N.L0))
$ (( $#files > 0 )) && print -rl -- $files | \
mailx -s "mga walang laman na file" [protektado ng email]

zsh/stat (kailangan zmodload zsh/stat)
# pagsubok kung ang isang simbolikong link ay nagli-link sa isang partikular na file
$ zmodload -i zsh/stat
$ ! stat -LH s foo.ln || [[ $s[link] != "foo.exe" ]] || ln -sf foo.exe foo.ln

# paghahambing ng mga petsa ng file
$ zmodload zsh/stat
$ file1=foo
$ file2=bar
$ touch bar & sleep 5 & touch foo
Ang $ echo $file1 ay $(($(stat +mtime $file2) - \
$(stat +mtime $file1))) segundo na mas matanda sa $file2.
Ang bar ay mas matanda ng 5 segundo kaysa sa foo

# ilista ang mga file ng isang disk na mas maliit kaysa sa ibang file
$ zmodload zsh/stat
$ stat -Isang max +size some-other-file
$ print -rl ./**/*(DL-$max)

# Ilista ang nangungunang 100 pinakamalaking file sa isang disk
$ zmodload zsh/stat
$ ls -fld ./**/*(d`stat +device .`OL[1,100])

# Kunin lamang ang user name at ang mga pangalan ng file mula sa (tulad ng
# ls -l * | awk '{print $3" " $8}')
$ zmodload zsh/stat
$ para sa file; gawin
> stat -sA user +uid -- "$file" &&
> print -r -- "$user" "$file"
> tapos na

# makuha ang pagkakaiba sa pagitan ng aktwal na mga byte ng file at inilalaan na mga byte ng file
$ zmodload zsh/stat
$ print $(($(stat +block -- file) * 512 - $(stat +size -- file)))

# Maghanap ng pinakamalaking file
# ``D'' : upang isama ang mga tuldok na file (d lowercase ay para sa device)
# ``O'' : reverse Ordered (o lowercase para sa non-reverse order)
# ``L'' : ayon sa Haba ng file (l ay para sa bilang ng mga link)
# ``[1]'': ibalik lamang ang una
$ zmodload zsh/stat
$ stat +laki ./*(DOL[1])

# laki ng file sa bytes
$ zmodload zsh/stat
$ stat -L +laki ~ / .zshrc
4707

# Tanggalin ang mga file sa isang direktoryo na hindi na-access sa huling sampung araw
# at magpadala ng ISANG mail sa may-ari ng mga file na nagpapaalam sa kanya ng mga file'
# pagtanggal.
$ zmodload zsh/stat zsh/mga file
$ typeset -A f; f=()
$ rm -f /path/**/*(.a+10e{'stat -sA u +uidr $REPLY; f[$u]="$f[$u]$REPLY"'})
$ para sa user (${(k)f}) {print -rn $f[$user]|mailx -s "..." $user}

# Kumuha ng "ls -l" sa lahat ng mga file sa puno na mas bata sa a
# tinukoy na edad
$ zmodload zsh/stat
$ para sa d (. ./**/*(N/m-2))
> print -r -- $'\n'$d: && cd $d && {
> para sa 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 ~-
> }

# makakuha ng petsa ng paggawa ng file
$ zmodload zsh/stat
$ stat -F '%d %m %Y' +mtime ~ / .zshrc
+30 06 2004
$ stat -F '%D' +mtime ~ / .zshrc
06/30/04

zsh/mga file (kailangan zmodload zsh/mga file)
# maghanap sa isang direktoryo para sa mga file na naglalaman ng isang tiyak na string pagkatapos ay kopyahin ang mga iyon
# file sa isa pang direktoryo.
$ zmodload zsh/mga file
$ IFS=$'\0'
$ cp $(grep -lZr foobar .) otherdirectory

zsh/mapfile (kailangan zmodload zsh/mapfile)
# grepping para sa dalawang pattern
$ zmodload zsh/mapfile
$ pattern1="foo"
$ pattern2="bar foo"
$ print -l ./**/*(DN.e{'z=$mapfile[$REPLY] && [[ $z = *$pattern1* && \
$z = *$pattern2* ]]'})
# o isang solusyon sa kumbinasyon ng zsh/pcre
$ zmodload -i zsh/mapfile zsh/pcre
$ pattern1="foo"
$ pattern2="bar foo"
$ pcre_compile "(?s)(?=.*?$pattern1).*?$pattern2"
$ pcre_study
$ print -l ./**/*(DN.e{'pcre_match $mapfile[$REPLY]'})

# katumbas ng ``mas mababa / etc / passwd | grep -v root''
$ zmodload zsh/mapfile
$ IFS=$'\n\n'
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*ugat*}
# o - para sa case insensitive
$ setopt extendedglob
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*(#i)ugat*}

# Kung ang isang XML-file ay naglalaman ng mga bagay tulad ng `` '' at `` '', numero
# itong mga walang laman na tag (mga nagtatapos sa '/>') kaya kung nakatagpo sa pareho
# order, ang mga naunang tag ay magiging `` 1 '' at
# `` 2 ''
$ zmodload zsh/mapfile
$ cnt=0
$ apfile[data.xml.new]=${(S)mapfile[data.xml]//\
> (#im) *<\/TAGA>/ $((++cnt))<\/TAGA>}

# tinatanggal ang lahat ng file sa mga user Maildir/new na naglalaman ng ``filename="gone.src''
$ zmodload zsh/{files,mapfile}
$ rm -f /u1/??/*/Maildir/new/100*(.e{'[[ $mapfile[$REPLY] == \
*filename=\"gone.scr\"* ]]'})

# Ilabas ang Pamagat mula sa isang postscript file at idagdag ang halagang iyon sa
# dulo ng filename
$ autoload -U zmv
$ zmodload zsh/mapfile
$ zmv '(*).ps' '$1-${${${mapfile[$f]##*%%Title: }%% *}//[^a-zA-Z0-9_]/}. ps'

zsh/mathfunc (kailangan 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(binhi) ))
0.01043488334700271

zsh/termcap (kailangan zmodload zsh/termcap)
$ zmodload -ab zsh/termcap echotc
$ BERDE=`echotc AF 2`
$ DILAW=`echotc AF 3`
$ RED=`echotch AF 1`
$ BRIGHTRED=`echotc md ; echotc AF 1`
$ print -l ${BERDE}berde ${DILAW}dilaw ${RED}pula ${BRIGHTRED}maliwanag

zsh/zpty (kailangan zmodload zsh/zpty)
$ zmodload zsh/zpty
$ zpty PW passwd $1
$ zpty PW passwd $1
# ``-r'': basahin ang output ng pangalan ng command.
# ``z'' : Parameter
$ zpty -r PW z '*password:'
# ipadala ang to command name ang ibinigay na mga string bilang input
$ zpty -w PW $2
$ zpty -r PW z '*password:'
$ zpty -w PW $2
# Ang pangalawang form, na may -d na opsyon, ay ginagamit upang tanggalin ang mga utos
# dating nagsimula, sa pamamagitan ng pagbibigay ng listahan ng kanilang mga pangalan. Kung walang mga pangalan
# ay ibinigay, lahat ng mga utos ay tinanggal. Ang pagtanggal ng command ay nagiging sanhi ng HUP
# signal na ipapadala sa kaukulang proseso.
$ zpty -d PW

zsh/net/socket (kailangan zmodload zsh/net/socket)
# ``-l'': magbukas ng socket na nakikinig sa filename
# ``-d'': ang argumento ay kukunin bilang target na file descriptor para sa
# koneksyon
# ``3'' : descriptor ng file. Tingnan ang ``A User's Guide to the Z-Shell''
# (3.7.2: Mga deskriptor ng file)
$ zmodload zsh/net/socket
$ zsocket -l -d 3
# ``-a'': tumanggap ng papasok na koneksyon sa socket
$ zsocket -a -d 4 3
$ zsocket -a -d 5 3 # tumanggap ng koneksyon
$ echo foobar >&4
$ echo barfoo >&5
$4>&- 5>&- 3>&

zsh/zftp (kailangan zmodload zsh/zftp)
$ autoload -U zfinit
$ zfinit
$ zfparams www.example.invalid myuserid mypassword
$ zfopen
$ zfcd tip
$ zfls -l zshtips.html
$ zfput zshtips.html
$ zfls -l zshtips.html

# Awtomatikong maglipat ng mga file gamit ang FTP na may error checking
$ autoload -U zfinit ; zfinit
$ zftp open host.name.invalid user passwd || labasan
$ zftp makakuha ng /remote/file > /local/file; r=$?
$ zftp isara && labasan r

# compress at ftp sa mabilisang
$ autoload -U zfinit ; zfinit
$ zftp bukas host.name.invalid password ng user
$ zftp makakuha ng $file | bzip2 > ${file}.bz2
$ zftp malapit na

# Recursice ``kumuha''
$ autoload -U zfinit ; zfinit
$ zfanon cr.yp.to
$ zfcd daemontools
$ para sa file sa `zfls` ; gawin
> zfget $file
$ tapos na
$ zfclose

# I-upload ang lahat ng regular na file sa $HOME/foobar (recursive) na mas bago kaysa
# dalawang oras sa ftp.foobar.invalid/path/to/upload
$ autoload -U zfinit ; zfinit
$ zfopen ftp.foobar.invalid/path/to/upload
$ cd $HOME/foobar
$ zfput -r **/*(.mh-2)
$ zfclose

# mahabang listahan ng mga file sa isang ftp
$ autoload -U zfinit ; zfinit
$ zfopen some-host
$ zfcd /some/remote/Dir
$ cd /some/local/Dir
# Kung ang list.txt ay matatagpuan sa remote host, lumipat sa
# zfget ${(f)"$(zftp get /path/to/remote/list.txt)"}
$ zfget ${(f)"$(cat list.txt)"}
$ zfclose

zsh/zselect (kailangan zmodload zsh/zselect)
# Ito ay katulad ng
,----
| $ sg=$(stty -g)
| $ stty -icanon min 0 time 50
| $basahin ang yesno
| $ stty "$sg"
| $ case "$yesno" in
| > oo) utos1;;
| > *) utos2;;
| > esac
`----
$ zmodload zsh/zselect
$ kung zselect -t 500 -r 0 && basahin ang yesno && [ yes = "$yesno" ]; pagkatapos
> utos1
> iba pa
> utos1
> fi

Opsyon


nabigasyon pagpipilian
auto_cd (payagan ang isa na lumipat sa isang direktoryo sa pamamagitan ng pagpasok nito bilang isang utos). auto_pushd
(awtomatikong idagdag ang mga dirs sa listahan ng push/pop) pushd_ignore_dups (at huwag i-duplicate
sila).

Misc
walang_hup (huwag magpadala ng signal ng HUP sa mga trabaho sa background kapag lalabas ng ZSH). print_exit_value (ipakita
isang mensahe na may exit code kapag ang isang command ay bumalik na may non-zero exit code)

kasaysayan pagpipilian
hist_verify (hayaan ang user na i-edit ang command line pagkatapos ng pagpapalawak ng history (hal !ls)
sa halip na agad itong patakbuhin) Gamitin ang parehong history file para sa lahat ng session : setopt
SHARE_HISTORY

Privacy / Katiwasayan
walang_clobber (o itakda ang -C; pigilan > pag-redirect mula sa pagputol ng ibinigay na file kung ito
mayroon na)

Baybay pagwawasto
itama (awtomatikong iwasto ang pagbabaybay ng mga utos). tama_lahat (awtomatikong
itama ang spelling ng bawat salita sa command line) dvorak (layout ng dvorak)

UNSORTED/MISC


Mailpath: simpleng maramihang mailpath:

mailpath=($HOME/Mail/mbox'?bagong mail sa mbox'
$HOME/Mail/tux.u-strasbg'?bagong mail sa tux'
$HOME/Mail/lilo'?bagong mail sa lilo'
$HOME/Mail/ldap-fr'?bagong mail sa ldap-fr')

Mailpath: dynamic na mailpath:

typeset -isang mailpath
para ako sa ~/Mail/Mga Listahan/*(.); gawin
mailpath[$#mailpath+1]="${i}? Mayroon kang bagong mail sa ${i:t}."
tapos

Iwasang mag-globbing sa mga espesyal na utos:

para sa com sa alias expr hanapin ang mattrib mcopy mdir mdel na;
alias $com="noglob $com"

Para sa paglipat ng iyong bashprompt sa zsh gamitin ang script na bash2zshprompt na matatagpuan sa zsh
pamamahagi ng pinagmulan sa ilalim Misc.

Para sa paglipat mula sa (t)csh patungong zsh gamitin ang tool na c2z na nagko-convert ng mga csh alias at
kapaligiran at shell variable sa zsh. Ginagawa ito sa pamamagitan ng pagpapatakbo ng csh, at pagkakaroon ng csh report
sa mga alias at variable. Pagkatapos ay iko-convert ito ng script sa mga zsh startup file. Mayroon itong ilan
mga isyu at impormasyon sa paggamit na nakadokumento sa itaas ng script na ito.

Narito ang mga function upang itakda ang pamagat at hardstatus ng isang XTerm o ng GNU Tabing sa zsh at
ang kasalukuyang direktoryo, ayon sa pagkakabanggit, kapag ipinakita ang prompt, at sa pangalan ng command
at ang natitirang command line, ayon sa pagkakabanggit, kapag ang isang command ay naisakatuparan:

pamagat ng function {
kung [[ $TERM == "screen" ]]; pagkatapos
# Gamitin ang dalawang ito para sa GNU Screen:
print -nR $' 33k'$1$' 33'\
print -nR $' 33]0;'$2$''
elif [[ $TERM == "xterm" || $TERM == "rxvt" ]]; pagkatapos
# Gamitin ang isang ito sa halip para sa XTerms:
print -nR $' 33]0;'$*$''
fi
}
function precmd { title zsh "$PWD" }
function preexec {
tularan -L zsh
lokal -a cmd; cmd=(${(z)1})
pamagat $cmd[1]:t "$cmd[2,-1]"
}

Ilagay ang sumusunod na linya sa iyong ~/.screenrc upang makita ang magarbong hardstatus na ito:

laging caption na "%3n %t%? (%u)%?%?: %h%?"

Mga espesyal na variable na itinalaga:

$LINENO $RANDOM $SECONDS $COLUMNS $HISTCHARS $UID
$EUID $GID $EGID $USERNAME $fignore $mailpath $cdpath

Links


Pangunahing site

http://www.zsh.org/

Pahina ng proyekto

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

Z shell page sa sunsite.dk

http://zsh.sunsite.dk/

From Bash to Z Shell: Conquering the Command Line - ang libro

http://www.bash2zsh.com/

"Zsh - die magische Shell" (aklat sa Aleman tungkol kay Zsh) nina Sven Guckes at Julius Plenz

http://zshbuch.org/

Mailinglistarchive

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

ZSH-FAQ

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

Gabay sa gumagamit

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

ZSH-Wiki

http://zshwiki.org/home/

Isang maikling pagpapakilala mula sa BYU

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

Mouse-Support ;)

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

Mga kurtina sa itaas: pagpapakilala ng Z shell

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

ZSH-Liebhaberseite (aleman)

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

ZSH-Seite ni Michael Prokop (aleman)

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

ZSH Prompt na panimula

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

ZSH page ni Adam

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

Zzappers Pinakamahusay sa Mga Tip sa ZSH

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

Zsh Webpage ni Christian Schneider

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

Ang zsh-lovers webpage

http://grml.org/zsh/

IRC channel

#zsh at irc.freenode.org

Ang Z shell reference-card (kasama sa zsh-lovers debian-package)

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

MGA AUTHORS


Ang manpage na ito ay isinulat ni Michael Prokop, Christian strcat Schneider at Matthias
Kopfermann. Ngunit maraming mga ideya ang kinuha mula sa zsh-geeks hal mula sa zsh-mailinglists
(zsh-users at zsh-workers), google, newsgroup at ang zsh-Wiki. Salamat sa iyong cool at
hindi kapani-paniwalang mga tip. Marami kaming natutunan sa iyo!

Sa pagkakasunud-sunod ng alpabeto:

Andrew 'zefram' Main - http://www.fysh.org/~zefram/
Barton E. Schaefer - http://www.well.com/user/barts/
Matthias Kopfermann - 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 Chazelas - http://stephane.chazelas.free.fr/
Sven Gucks - http://www.guckes.net/
Sven Wischnowski - http://w9y.de/zsh/zshrc

Gumamit ng mga zsh-lover online gamit ang mga serbisyo ng onworks.net


Mga Libreng Server at Workstation

Mag-download ng Windows at Linux apps

Linux command

Ad




×
anunsyo
❤️Mamili, mag-book, o bumili dito — walang gastos, tumutulong na panatilihing libre ang mga serbisyo.