zsh-lovers - آنلاین در ابر

این دستور zsh-lovers است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


zsh-lovers - نکات، ترفندها و نمونه هایی برای پوسته Z

خلاصه


فقط آن را بخوانید. ;-)

بررسی اجمالی


هر وقت به کتابچه راهنمای zsh نگاه می کنیم، تعجب می کنیم که چرا هیچ نمونه ای وجود ندارد یا به سادگی وجود دارد
چیزهایی در زندگی (پوسته) zsh دارای ویژگی های زیادی است، اما هیچ صفحه مدیریتی با برخی از آنها وجود نداشت
نمونه هایی (مانند procmailex(5)). به همین دلیل ما این manpage را نوشتیم.

بیشتر ترفندها و oneliner از لیست های پستی zsh-users، zsh-workers، google،
گروه های خبری و از خودمان. بخش را ببینید لینک ها برای جزئیات بیشتر.

توجه: این صفحه شخصی (عاشقان zsh(1)) است نه بخشی رسمی از پوسته Z! این فقط یک عادلانه است
برای سرگرمی - manpage ;) برای نظرات، گزارش‌های خطا و بازخورد، نگاهی گذرا به آن بیندازید
بخش اشکالات.

SHELL-SCRIPTING


این بخش چند مثال برای موارد مورد نیاز پوسته ارائه می دهد. توجه کنید که شما
نباید از آن استفاده کرد در غیر این صورت اکثر نمونه ها کار نمی کنند. گزینه ها را در پوسته ها تجزیه کنید. مثال
برگرفته از ZWS توسط آدام چودوروفسکی (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
اگر [[$? != 0 || "$o_help" != "" ]]; سپس
echo استفاده: $(نام پایه "$0") "[-p PORT] [-r DIRECTORY]"
خروج 1
fi

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

اگر [[ $root[1] != '/' ]]; سپس root="$PWD/$root"; فی
}
# اکنون از تابع استفاده کنید:
parse_Options $*

مثال ها


زیربخش های موجود هستند نام مستعار, تکمیل, مرتب نشده/متفرقه مثال ها, (باز گشتی)
گلوبینگ - مثال ها, اصلاح کننده ها استفاده, تغییر مسیر-نمونه ها, ZMV-نمونه ها و
ماژول-نمونه ها.

نام مستعار
پسوندهای مستعار در zsh از نسخه 4.2.0 پشتیبانی می شوند. چند نمونه:

نام مستعار -s tex=vim
نام مستعار -s html=w3m
نام مستعار -s org=w3m

اکنون پس از وارد کردن، کلید بازگشت را فشار دهید foobar.tex vim را با foobar.tex شروع می کند. تماس گرفتن a
فایل html مرورگر w3m را اجرا می کند. www.zsh.org و با فشردن enter، w3m با آرگومان شروع می شود
www.zsh.org. نام مستعار جهانی را می توان در هر نقطه از خط فرمان استفاده کرد. مثال:

$ مستعار -g C='| wc -l'
نام مستعار $ grep ~/.zsh/* ج
443

برخی از نام مستعار جهانی کم و بیش مفید (انتخاب کنید که برای شما مفید هستند یا نه
مال خودت):

نام مستعار -g ...='../ ..'
نام مستعار -g ....='../../..'
نام مستعار -g .....='../../../..'
نام مستعار -g CA="2>&1 | cat -A"
نام مستعار -g C='| wc -l'
نام مستعار -g D="DISPLAY=:0.0"
نام مستعار -g DN=/dev/null
نام مستعار -g ED="صادر کردن DISPLAY=:0.0"
نام مستعار -g EG='|& egrep'
نام مستعار -g EH='|& head'
نام مستعار -g EL='|& کمتر'
نام مستعار -g ELS='|& کمتر -S'
نام مستعار -g ETL='|& tail -20'
نام مستعار -g ET='|& tail'
نام مستعار -g F=' | fmt -'
نام مستعار -g G='| egrep'
نام مستعار -g H='| سر'
نام مستعار -g HL='|& head -20'
نام مستعار -g Sk="*~(*.bz2|*.gz|*.tgz|*.zip|*.z)"
مستعار -g LL="2>&1 | کمتر"
نام مستعار -g L="| کمتر"
نام مستعار -g LS='| کمتر -S'
نام مستعار -g MM='| اکثر'
نام مستعار -g M='| بیشتر'
نام مستعار -g NE="2> /dev/null"
نام مستعار -g NS='| مرتب کردن -n'
نام مستعار -g NUL="> /dev/null 2>&1"
نام مستعار -g PIPE='|'
نام مستعار -g R=' > /c/aaa/tee.txt '
نام مستعار -g RNS='| مرتب کردن - شماره
نام مستعار -g S='| مرتب سازی'
نام مستعار -g TL='| دم -20'
نام مستعار -g T='| دم'
نام مستعار -g US='| مرتب کردن -u'
نام مستعار -g VM=/var/log/messages
نام مستعار -g X0G='| xargs -0 egrep'
نام مستعار -g X0='| xargs -0'
نام مستعار -g XG='| xargs egrep'
نام مستعار -g X='| xargs'

تکمیل
همچنین به man 1 zshcompctl zshcompsys zshcompwid مراجعه کنید. zshcompctl سبک قدیمی zsh است
تکمیل قابل برنامه ریزی، zshcompsys سیستم تکمیل جدید است، zshcompwid zsh هستند
ویجت های تکمیل

برخی از توابع، مانند _apt و _dpkg، بسیار کند هستند. می توانید از کش برای پروکسی استفاده کنید
لیست نتایج (مانند لیست بسته های دبیان موجود) از کش استفاده کنید:

zstyle ':completion:*' use-cache روشن است
zstyle ':completion:*' cache-path ~/.zsh/cache

جلوگیری از تکمیل شدن فایل‌ها/دایرکتوری‌های CVS:

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

تطبیق فازی تکمیل‌ها برای زمانی که آنها را اشتباه تایپ می‌کنید:

zstyle ':completion:*' تکمیل کننده _complete _match _تقریبی
zstyle ':completion:*:match:*' فقط اصلی است
zstyle ':completion:*:تقریبی:*' حداکثر خطاهای 1 عددی

و اگر می خواهید تعداد خطاهای مجاز توسط _approximate با طول افزایش یابد
از آنچه تاکنون تایپ کرده اید:

zstyle -e ':completion:*:proximate:*'
max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))عددی)'

توابع تکمیل را برای دستوراتی که ندارید نادیده بگیرید:

zstyle ':completion:*:functions' ignored-patterns '_*'

با توابع کمکی مانند:

xdvi() { دستور xdvi ${*:-*.dvi(om[1])} }

در بسیاری از موارد می‌توانید از تکمیل کردن اجتناب کنید، اما اگر انجام دادید، ممکن است بخواهید
بلافاصله وارد منوی انتخاب شوید و کلمات را بر اساس زمان مرتب کنید:

zstyle ':completion:*:*:xdvi:*' منو بله انتخاب کنید
zstyle ':completion:*:*:xdvi:*' زمان مرتب سازی فایل

تکمیل شناسه های فرآیند با انتخاب منو:

منوی zstyle ':completion:*:*:kill:*' بله ​​انتخاب کنید
zstyle ':completion:*:kill:*' همیشه لیست نیروها

اگر در نهایت از یک دایرکتوری به عنوان آرگومان استفاده کنید، این کار اسلش انتهایی را حذف می کند (مفید است
در ln)

zstyle ':completion:*' squeeze-slash true است

cd هرگز دایرکتوری والد را انتخاب نمی کند (به عنوان مثال: cd ../ ):

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

روش دیگر برای سریع تغییر دادن دایرکتوری. این را به خود اضافه کنید ~ / .zshrc، سپس فقط وارد شوید
“cd ..../dir”

rationalise-dot() {
اگر [[ $LBUFFER = *.. ]]; سپس
LBUFFER+=/ ..
دیگر
LBUFFER+=.
fi
}
zle -N rationalise-dot
کلید اتصال . منطقی-نقطه

طبقه بندی نشده / متفرقه مثال ها
نکته: فهرستی از واجد شرایط glob را می‌توانید در آن پیدا کنید zshexpn(1). رجوع کنید به "man 1 zshexpn |
کمتر -p” واجد شرایط برای جزئیات.

# نام همه فایل‌هایی را که *نبا** با الگوی *هرجا* روی آن مطابقت دارند، دریافت کنید
# فایل (و بدون «-L» زیرا GNUish است)
$ print -rl -- *(.^e{'grep -q pattern $REPLY'})
# یا
$ : *(.e{'grep -q الگوی $REPLY || print -r -- $REPLY'})

# عدد تصادفی
$ echo $[${RANDOM}%1000] # تصادفی بین 0-999
$ echo $[${RANDOM}%11+10] # تصادفی بین 10-20
$ echo ${(l:3::0:)${RANDOM}} طول # N رقم (3 رقم)

# یک کلمه را معکوس کنید
$ echo "${(j::)${(@Oa)${(s::):-سلام}}}"

# نمایش جدیدترین فهرست
$ ls -ld *(/om[1])

# عنصر آرایه تصادفی
$ FILES=( .../files/* )
$ feh $FILES[$RANDOM%$#FILES+1]

# cat خط اول در تمام فایل های این dir
$ برای فایل (*(ND-.)) IFS= read -re < $file

# عددی بودن یک پارامتر را تست کنید
$ اگر [[ $1 == <-> ]] ; سپس
اکو عددی
دیگر
اکو غیر عددی
fi

# تمام فایل‌های .c را که فایل .o برای آنها وجود ندارد به من نشان دهید.
$ print *.c(e_'[[ ! -e $REPLY:ro ]]'_)

# همه فایل ها در /بود/ که تحت مالکیت root نیستند
$ ls -ld /بود/*(^u:root)

# همه فایل هایی که مالک مجوز خواندن و اجرای آنها را دارد
$ echo *(f:u+rx:)

# همان، اما دیگران نیز مجوز اجرا ندارند
$ echo *(f:u+rx,ox:)

# انبساط مهاربند - مثال
$ X = (ABC)
$ Y=(+ -)
$ print -r -- $^X.$^Y

A.+ A.- B.+ B.- C.+ C.-
# جدیدترین فایل حاوی رشته "fgractg*.log" را در قسمت واکشی کنید
# نام فایل و حاوی رشته 'ORA-' در آن است
$ file=(fgractg*.log(Nm0om[1]))
$ (($#file)) && grep -l ORA- $file
# بدون Zsh
$ files=$( find . -name . -o -prune -name 'fgractg*>log' -mtime 0 -print )
> اگر [ -n "$files" ]; سپس
> IFS='
>
> مجموعه -f
> file=$(ls -td $files | head -1)
> grep -l ORA- "$file"
> فی

# تعداد مشخصی از فرآیندهای فرزند را تا پایان کل کار در حال اجرا نگه دارید
$ zsh -c 'sleep 1 & sleep 3 & sleep 2 & print -rl -- $jobtexts'

# فایل های با طول صفر و .bak را در یک فهرست حذف کنید
$ rm -i *(.L0) *.bak(.)

# فایل هایی را که پسوند ندارند چاپ کنید
$ printf '%s\n' ^?*.*
$ printf '%s\n' ^?*.[^.]*(D)
$ ls -d -- ^?*.*(D)

# یافتن فایل هایی که حاوی رشته خاصی نیستند
فایل $ print -rl* | comm -2 -3 - <(پرونده رشته grep -l*)'
$ برای f (پرونده*(N)) رشته grep -q $f || print -r $f'

# نمایش/بررسی اینکه آیا یک گزینه تنظیم شده است یا خیر. هر دو با $options as کار می کند
# با $builtins
$ echo $options[درست]
خاموش
$$options[zle]
on

# تعداد دایرکتوری های روی پشته را بشمارید
$ print $((${${(z)${(f)"$(dirs -v)"}[-1]}[1]} + 1)) # یا
$dirs -v | awk '{n=$1}END{print n+1}'

# مطابقت با تمام فایل هایی که در نام فایل نقطه ندارند
$ ls *~*.*(.)

# فقط نشانی IP را از «دستگاه ifconfig» نشان دهید
# ifconfig از net-tools (لینوکس)
$ چاپ ${${$(LC_ALL=C / sbin / ifconfig eth0)[7]}:gs/addr://}
# ifconfig از 4.2BSD {Free,Net,Open}BSD
چاپ ${$(/ sbin / ifconfig tun0)[6]}

# همه آدرس‌های IP را در چند کلاس C یا همه میزبان‌ها پینگ کنید
# به / غیره / میزبان
$ برای i در {1..254}؛ انجام ping -c 1 192.168.13.$i; انجام شده
or
$ I = 1
$ while ( [[ $I -le 255 ]] ) ; انجام پینگ -1 2 150.150.150.$I; اجازه دهید I++; انجام شده
or
$ برای i در $(sed 's/#.*//' > / غیره / میزبان | awk "{print $2}")
: انجام دادن
: echo "تلاش $i..."
: ping -c 1 $i ;
: echo '============================='
: انجام شده

# همه ماژول های موجود را هنگام راه اندازی بارگیری کنید
تایپ $ -U m
$ متر = ()
$ برای md ($module_path) m=($m $md/**/*(*e:'REPLY=${REPLY#$md/}'::r))
$ zmodload -i $m

# همه فایل های داخل یک فهرست را طوری تغییر نام دهید که نام آنها یک عدد باشد
پیشوند # در ترتیب مرتب سازی پیش فرض.
$ i=1; برای j در *; انجام mv $j $i.$j; ((i++))؛ انجام شده
$ i=1; برای f در *; mv $f $(echo $i |
awk '{ printf("%03d", $0)}').$f; ((i++))؛ انجام شده
$ عدد صحیح i=0; برای f در *; mv $f $[i+=1].$f; انجام شده

# همه پیوندهای نمادین را بدون هدف در جریان فعلی پیدا کنید (و چاپ کنید).
#درخت کثیف
$ $ فایل ***/*(D@) | fgrep شکسته
$ برای i در ***/*(D@); [[ -f $i || -d $i ]] || پژواک $i
$ echo ***/*(@-^./=%p)
$ print -l ***/*(-@)

# فهرست همه فایل‌های ساده‌ای که پسوندهای فهرست‌شده در «fignore» ندارند
$ ls ***/*~*(${~${(j/|/)fignore}})(.)
# بالا را ببینید، اما اکنون فایل های اجرایی را حذف کنید
$ ls ***/*~*(${~${(j/|/)fignore}})(.^*)

# فایل هایی را که پسوند ندارند چاپ کنید (نیاز به *setopt extendedglob* است
# و *setopt dotglob*)
$ printf '%s\n' ^?*.*

# فهرست فایل ها به ترتیب معکوس بر اساس نام مرتب شده است
$ print -rl -- *(روشن)
or
$ print -rl -- *(^on)

# مترادف ``ps ax | awk "{print $1}""
$ print -l /proc/*/cwd(:h:t:s/self//)

# PID یک فرآیند را دریافت کنید (بدون «ps»، «sed»، «pgrep»، ..
# (تحت لینوکس)
$ pid2 () {
> i محلی
> برای من در /proc/<->/stat
> انجام دهید
> [[ "$(< $i)" = *\((${(j:|:)~@})\)* ]] && echo $i:h:t
> انجام شد
> }

# برای X در 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y'; انجام دادن ...
$ برای (( i = 36#n; i <= 36#y; i++ )); انجام دادن
> چاپ ${$(([##36]i)):l}
> انجام شد
# یا در ترکیب با "dc"
$ print {$((##n))..$((##y))}P\ 10P | دی سی
# یا با "eval"
$ eval print '${$(([##36]'{$((36#n))..$((36#y))}')):l}'

# foreach در یک خط پوسته
$ برای f (*) print -r -- $f

# یک دایرکتوری را به صورت بازگشتی بدون داده/فایل کپی کنید
$dirs=(**/*(/))
$ cd -- $dest_root
$ mkdir -p -- $dirs
# یا بدون zsh
$ پیدا کنید. -type d -exec env d="$dest_root"
sh -c ' exec mkdir -p -- "$d/$1"' '{}' '{}' \;

# اگر 'foo=23'، سپس با 10 رقم با '0' جلویی چاپ کنید.
$ foo = 23
$ print ${(r:10::0:)foo}

# نام تمام فایل هایی را که در فهرست اصلی خود دارند، پیدا کنید
# بیش از 20 کاراکتر در نام فایل آنها
print -rl $HOME/${(l:20::?:)~:-}*

# ذخیره آرایه ها
$ print -r -- ${(qq)m} > $nameoffile # آن را ذخیره کنید
$ eval "m=($(cat -- $nameoffile)" # یا استفاده کنید
$ m=("${(@Q)${(z)"$(cat -- $nameoffile)"}}") # برای بازیابی آن

# یک "ls -l" در تمام فایل‌های درختی که جوان‌تر از a هستند دریافت کنید
# سن مشخص شده (به عنوان مثال "ls -l" همه فایل‌های درختی که در آن قرار دارند
# اصلاح شده در 2 روز گذشته)
$ ls -tld ***/*(m-2)
# این به شما یک لیست 1 فایل perl line (نه à la ls -R) می دهد.
# به یک راه آسان برای داشتن خروجی سبک "ls -R" فکر کنید
# فقط فایل های جدیدتر از 2 روز.
$ برای d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> سی دی $d && {
> l=(*(Nm-2))
> (($#l)) && ls -ltd -- $l
> سی دی ~-
> }
> }
# اگر می‌خواهید دایرکتوری‌ها حتی اگر mtime آنها درج شود
# بیش از 2 روز است:
$ برای d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> سی دی $d && {
> l=(*(N/,m-2))
> (($#l)) && ls -ltd -- $l
> سی دی ~-
> }
> }
# و اگر می خواهید فقط دایرکتوری هایی با mtime < 2 روز لیست شوند:
$ برای روز (. ./**/*(N/m-2)) {
> print -r -- $'\n'${d}:
> سی دی $d && {
> l=(*(Nm-2))
> (($#l)) && ls -ltd -- $l
> سی دی ~-
> }
> }

# چاپ 42 ``-''
$ echo ${(l:42::-:)}
# یا از «$COLUMS» استفاده کنید
$ echo ${(l:$COLUMNS::-:)}
# و اکنون با رنگ‌ها (نیاز به بارگیری خودکار رنگ‌ها؛ رنگ‌ها)
$ echo "$bg[red]$fg[black]${(l:42::-:)}"

# STDERR را به دستوری مانند xless بدون تغییر مسیر STDOUT نیز هدایت کنید.
$ foo 2 >> (xless)
# اما این دستور را به صورت ناهمزمان اجرا می کند. برای انجام همزمان:
$ { { foo 1>&3 } 2>&1 | xless } 3>&1

# همه فایل های MP3 را از name with spaces.mp3 به Name With Spaces.mp3 تغییر نام دهید
$ برای i در *.mp3; انجام دادن
> mv $i ${${(C)i}:s/Mp3/mp3/}
> انجام شد

# نام فایل‌ها را که فقط حاوی اعداد هستند و با xml. ختم می‌شوند مطابقت دهید (نیازمند است
# *setopt kshglob*)
$ ls -l [0-9]##.xml
$ ls -l <0->.xml

# همه فایل های "non txt" را حذف کنید
$ rm ./^*.txt

# 200 فایل را از یک دایرکتوری به فهرست دیگر منتقل کنید
$ mv -- *([1,200]) /دیگر/ کارگردان

# تبدیل تصاویر (foo.gif => foo.png):
$ برای i در ***/*.gif; $i $i:r.png را تبدیل کنید

# تبدیل مجموعه ای از فایل های mp3 به wave یا cdr،
# به عنوان مثال file.wav -> file.mp3)
$ برای i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}

# دانلود با LaTeX2HTML فایل های ایجاد شده (به عنوان مثال ZSH-Guide):
$ برای f in http://zsh.sunsite.dk/Guide/zshguide{,{01..08}}.html; انجام دادن
> lynx -source $f >${f:t}
> انجام شد

# تمام فایل‌های dir1 و dir2 را که تعداد خطوط آن‌ها بیشتر از 10 است به به منتقل کنید
# دایرکتوری دیگر بگویید "/more10"
$ mv dir[12]/**/*.cr(-.e{'((`wc -l < ​​$REPLY` > 10))'}) /more10

# با dpkg یک فهرست اصلی از هر فایلی که نصب کرده است ایجاد کنید
$ تفاوت <(یافتن / | مرتب سازی) <(گربه /var/lib/dpkg/info/*.list | مرتب سازی)

# این Escape-Sequences لعنتی را جایگزین کنید:
$ رنگهای بارگذاری خودکار ; رنگ ها
$ print "$bg[cyan]$fg[blue]تو یک احمق هستی" >> /dev/pts/3

# مقدار ASCII یک کاراکتر را دریافت کنید
$ char=N ; چاپ $((#char))

# نام فایل "Erweiterung"
# توجه: (N) می گوید که از گزینه nullglob برای این خاص استفاده کنید
# الگوی کره ای.
$ برای i در *.o(N); انجام دادن
> rm $i
> انجام شد

# تغییر نام فایل ها؛ یعنی FOO به foo و bar to BAR
$ برای i در *(.); mv $i ${i:l} # 'FOO' به 'foo'
$ برای i در *(.); mv $i ${i:u} # «نوار به «BAR»

# نمایش همه فایل‌های suid در $PATH
$ ls -latg ${(s.:.)PATH} | grep '^...s'
# یا پیچیده تر ؛)
$ print -l ${^path}/*(Ns,S)
# یا فقط فایل های اجرایی با الگوی داده شده توسط کاربر نمایش داده شود
$ print -l ${^path}/*vim*(*N)

# فایل gzip زمانی که حاوی یک رشته خاص است
$gzip ${(ps:\0:)"$(grep -lZ foobar ./*.txt(.))"}

# یک خط کوچک یک خطی که از stdin خوانده می شود و به اولین stdout چاپ می شود
# خط منحصر به فرد یعنی خطوطی را که قبلا چاپ شده اند چاپ نمی کند
# (این شبیه به فرمان منحصربه‌فرد است، اما منحصربه‌فرد فقط می‌تواند کنترل کند
# خطوط مجاور).
$ IFS=$'\n\n'; print -rl -- ${(Oau)${(Oa)$(cat file;echo .)[1,-2]}}

# هر فایل اجرایی را در PATH لیست می کند
$ print -l ${^path}/*(-*N)

# همه فایل‌های .c را در همه زیرشاخه‌ها، به جز_ زیر شاخه‌های SCCS مطابقت دهید؟
$ ls ***/*.c~(*/)#SCCS/*

# فهرست همه «README» - فایل‌هایی که به حروف بزرگ و کوچک حساس نیستند با حداکثر. یک اشتباه تایپی
$ ls ***/*(#ia2) readme

# بررسی غیر حساس به حروف بزرگ برای متغیرها
$ اگر [[ $OSTYPE == (#i)LINUX*(#I) ]]; سپس
> پژواک "پنگوئن در هیئت مدیره."
> دیگر
> بازتاب "Not a Linux."
> فی

(باز گشتی) گلوبینگ - مثال ها
فهرستی از واجد شرایط glob را می‌توانید در اینجا پیدا کنید zshexpn(1). توجه داشته باشید: **/ برابر است با
(*/)#! مثلا:

$ چاپ (*/)#zsh_us.ps
zsh-4.2.3/Doc/zsh_us.ps
$ چاپ **/zsh_us.ps
zsh-4.2.3/Doc/zsh_us.ps

# «README» را در همه زیرشاخه ها جستجو کنید
$ ls -l **/README

# دایرکتوری هایی را بیابید که حاوی "index.php" و "index.html" هستند یا در
# عمومی، دایرکتوری هایی که حاوی بیش از یک فایل مطابق با "index.*" هستند.
$ ls **/*(D/e:'[[ -e $REPLY/index.php && -e $REPLY/index.html ]]':)
# یا
$ ls **/*(D/e:'l=($REPLY/index.*(N)); (($#l >= 2 ))':)

# دستور یافتن برای جستجوی نام دایرکتوری به جای نام پایه
$ print -rl /**/*~^*/path(|/*)
# یا - بدون Zsh
$ پیدا کردن / | grep -e /path/ -e '/path$'

# مسیر دایرکتوری هایی را که ده بزرگترین فایل معمولی C را در خود دارند چاپ کنید
# در دایرکتوری و زیر شاخه های فعلی.
$ print -rl -- **/*.c(D.OL[1,10]:h) | مرتب کردن -u

# فایل هایی با اندازه == 0 پیدا کنید و یک ایمیل ارسال کنید
فایل $=(**/*(ND.L0m+0m-2))
> (( $#files > 0 )) && print -rl -- $files |
mailx -s "فایل های خالی" foo@bar.tdl

# chmod بازگشتی
$ chmod 700 **/(.) # فقط فایل
$ chmod 700 **/(/) # فقط دایرکتوری ها

# تمام فایل های موجود در آن دایرکتوری را در 2 ستون چاپ کنید
$ print -rC2 -- ${1:[...]}/*(D:t)
# ^- تعداد ستون های ob
# یا - اگر در مورد کاراکترهای خاص نگران هستید - استفاده کنید
لیست $=(${1:[...]}/*(ND:t))
$ (($#list)) && print -rC2 -- ${(V)list}

# جستجوی همه فایل ها در / خانه /*/*-mail/ با تنظیم پرچم "chmod -s".
# (بازگردانی، شامل dotfiles) پرچم setgid/setuid را بردارید و چاپ کنید
# یک پیام
$ chmod -s / خانه /*/*-mail(DNs,S) / خانه /*/*-mail/**/*(DNs,S))
# یا با یک اسکریپت کوچک
$ برای فایل (/ خانه /*/*-mail(DNs,S) / خانه /*/*-mail/**/*(DNs,S)) {
> print -r -- $file
> chmod -s $file && print -r ثابت $file
> }
# یا از «zargs» (نیاز به بارگذاری خودکار zargs) استفاده کنید، از فهرست arg نیز جلوگیری کنید
# خطای طولانی
دلار زرگ / خانه /*/*-mail(DNs,S) / خانه /*/*-mail/**/*(DNs,S)) -- chmod -s

# فهرست فایل هایی که از «foo23» به بالا شروع می شوند (foo23، foo24، foo25، ..)
$ ls -l foo<23->

# همه فایل‌هایی را که با رشته‌های تاریخ شروع می‌شوند از ۴ ژوئن تا پایان دریافت کنید
# 9 ژوئن 2004
$ ls -l 200406{04..10}*(N)
# یا اگر به شکل 200406XX هستند (به "setopt extended_glob" نیاز است
$ ls -l 200306<4-10>.*

# فاصله ها را از نام فایل ها حذف کنید
$ برای یک در ./**/*\ *(Dod); mv $a ${a:h}/${a:t:gs/ /_} را انجام دهید. انجام شده

# فقط همه فایل های *.c و *.h را نشان دهید
$ ls -l *.(c|h)

# فقط همه فایل های *.c - را نشان دهید و "foo.c" را نادیده بگیرید
$ ls *.c~foo.c

# نمایش داده ها به فرمت *واقعی* باینری
$ zsh -ec 'while {} {printf %.8x $n;repeat 8
> {read -ku0 a printf \ %.8d $(([##2]#a))};print;((n+=8))}' < باینری

# فقط فایل های قابل خواندن جهان را نشان دهید
$ ls -l *(R)

# فایل های فهرست موجود در فهرست فعلی توسط مالک قابل نوشتن نیستند
$ print -l ~/*(ND.^w)

# فایل هایی را که قدیمی تر از یک پارامتر معین هستند، پیدا و حذف کنید
# (ثانیه/دقیقه/ساعت)
# تمام فایل های معمولی در /Dir که قدیمی تر از 3 ساعت هستند را حذف می کند
$ rm -f /Dir/**/*(.mh+3)
# همه پیوندهای نمادین در /Dir را که قدیمی تر از 3 دقیقه هستند حذف می کند
$ rm -f /Dir/**/*(@mm+3)
# همه غیر dir ها را در /Dir که قدیمی تر از 30 ثانیه هستند حذف می کند
$ rm -f /Dir/**/*(ms+30^/)
# تمام پوشه ها، زیر پوشه ها و فایل های قدیمی تر از یک ساعت را حذف می کند
$ rm ./**/*(.Dmh+1,.DL0)
# تمام فایل های بیش از 6 ساعت از عمر را حذف می کند
$ rm -f ***/*(mh+6)
# همه فایل ها را حذف می کند به جز ده مورد جدیدتر (همه به جز 10 مورد آخر را حذف کنید
# فایل در یک فهرست)
$ rm ./* (Om[1,-11])
توجه: اگر فهرست arg خیلی طولانی است، از rm داخلی استفاده می کنید. برای
مثال:
$ zmodload zsh/files ; rm -f ***/*(mh+6)
یا از تابع zargs استفاده کنید:
بارگذاری خودکار $zargs ; زارگ ***/*(mh+6) -- rm -f

# راهنمای کاربر برای Z-Shell /5.9: تولید و الگوی نام فایل
# تطبیق یافتن همه فایل ها در همه زیر شاخه ها، جستجوی بازگشتی،
# که دارای نام مشخصی هستند، به حروف بزرگ و کوچک حساس نیستند، حداقل 50 کیلوبایت بزرگ هستند،
# بیش از یک هفته نیست و متعلق به کاربر اصلی است و اجازه می دهد تا
# تا یک اشتباه در املای نام. در واقع مورد نیاز
# عبارت به این شکل است:
$ ls **/(#ia1)name(LK+50mw-1u0)

# UID را از 102 به 666 تغییر دهید
chown 666 $ ***/*(u102)

# لیست تمام فایل هایی که از 10 ساعت گذشته به روز نشده اند
$ print -rl -- *(Dmh+10^/)

# فقط قدیمی ترین فایل یک فهرست را حذف کنید
$ rm ./*نام فایل*(Om[1])

# خروجی را از ls ​​-l بر اساس اندازه فایل مرتب کنید
$ ls -fld *(OL)

# جدیدترین فایل را در یک فهرست پیدا کنید
$ setopt dotglob ; دایرکتوری چاپ/**/*(om[1])

# فقط فایل‌های خالی را نشان دهید که نه «گروهی» یا «قابل نوشتن جهانی»
$ ls *(L0f.go-w.)

# ده فایل جدید در فهرست ها و زیرمجموعه ها را پیدا کنید - و فهرست کنید.
# (باز گشتی)
$ print -rl -- ***/*(Dom[1,10])

# فقط 5 خط را با دستور "ls" چاپ کنید (مانند ``ls -laS | head -n 5'').
$ ls -fl *(DOL[1,5])

# نمایش 5-10 فایل آخرین اصلاح شده.
$ print -rl -- /path/to/dir/**/*(D.om[5,10])

# همه فایل‌ها را بدون مالک معتبر پیدا کنید.
$ chmod someuser /**/*(D^u:${(j.:u:.)${(f)"$(/ etc / passwd)"}%%:*}:)

# همه دایرکتوری های خالی یک درخت را پیدا کنید.
$ برای f در ***/*(/l2); do foo=($f/*(N)); [[ -z $foo ]] && چاپ $f; انجام شده
# توجه: از Zsh 4.2.1، واجد شرایط glob F یک دایرکتوری غیر خالی را نشان می دهد.
# از این رو *(F) همه زیرشاخه ها را با ورودی نشان می دهد، *(/^F) به معنای همه است
# زیرشاخه بدون ورودی.
$ ls -ld *(/^F)

# پس از آن دایرکتوری های خالی را حذف کنید.
$ rmdir ./**/*(/od) 2> /dev/null

# فقط فایل هایی را نشان دهید که متعلق به گروه «کاربران» هستند.
$ ls -l *(G[کاربران])

اصلاح کننده ها استفاده
اصلاح‌کننده‌ها مکانیزم قدرتمندی هستند که به شما امکان می‌دهند نتایج بازگردانده شده توسط پارامتر را تغییر دهید.
گسترش نام فایل و تاریخچه دیدن zshexpn(1) برای جزئیات.

# توجه: Zsh 4.3.4 مورد نیاز است!
بارگذاری خودکار $ - سن U
# فایل امروز اصلاح شد
$ print *(e:age today now :)
# فایل از ساعت 5 بعدازظهر اصلاح شد
چاپ $ * (e-age 17:00 اکنون-)
# ... از ساعت 5 دیروز
چاپ $ * (e-age دیروز، 17:00 اکنون-)
# ... از کریسمس گذشته قبل از امروز
$ چاپ *(e-age 2006/12/25 امروز-)
# ... قبل از دیروز
چاپ $ * (e-age 1970/01/01 دیروز-)
# همه فایل‌ها بین شروع آن تاریخ‌ها اصلاح شدند
$ چاپ *(e:age 2006/10/04 2006/10/09:)
# همه فایل‌ها در آن تاریخ اصلاح شدند
چاپ $ * (e:age 2006/10/04:)
# زمان عرضه
$ print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)

# یک جزء دنباله نام مسیر را حذف کنید، سر را ترک کنید. این کار مثل
# "dirname".
$ echo =ls(:h)
/ صندوقچه

# تمام اجزای نام مسیر اصلی را حذف کنید و دم را رها کنید. این کارها
# مانند "نام پایه".
$ echo =ls(:t)
ls

# پسوند را از هر فایل حذف کنید (*.sh در این مثال)
$f:e پسوند فایل $f است
:h --> head (dirname)
:t --> دم (نام پایه)
:r --> استراحت (پسوند حذف شد)
$ برای f (*.sh) mv $f $f:r

# یک پسوند نام فایل از فرم '.xxx' را حذف کنید و نام ریشه را باقی بگذارید.
$ echo $PWD
/usr/src/linux
$ echo $PWD:t
لینوکس

# همه به جز پسوند را حذف کنید.
$ foo = 23.42
$ echo $foo
23.42
$ echo $foo:e
42

# دستور جدید را چاپ کنید اما آن را اجرا نکنید. فقط با تاریخ کار می کند
# گسترش
$ echo =ls(:h)
/ صندوقچه
$ !echo:p
$ echo =ls(:h)

# کلمات جایگزین را نقل قول کنید، از جایگزینی بیشتر فرار کنید.
$ bar = "23'42"
$ echo $bar
23'42
$ echo $bar:q
23 \ '42

# کلمات را به تمام حروف کوچک تبدیل کنید.
نوار $=FOOBAR
$ echo $bar
FOOBAR
$ echo $bar:l
فوبار

# کلمات را به تمام حروف بزرگ تبدیل کنید.
$ bar=foobar
$ echo $bar
فوبار
$ echo $bar:u
FOOBAR

# اولین کاراکتر یک کلمه را به حروف بزرگ تبدیل کنید
$ foo = "یک دو سه چهار"
$ print -r -- "${(C)foo}"
یک دو سه چهار

تغییر مسیر-نمونه ها
دیدن zshmisc(1) برای اطلاعات بیشتر (یا کمتر از ${^fpath}/zmv(N))

# 'خروج 1' را در پایان همه فایل های *.sh - اضافه کنید
$ echo "خروج 1" >> *.sh

# در حال افزودن فایل به foobar.tar.gz
$ eval set =(gunzip < foobar.tar.gz) '
tar rf $1 اضافی.txt &&gzip <$1 > foobar.tar.gz'

# تغییر مسیر خروجی به یک فایل و نمایش بر روی صفحه نمایش
$ foobar >&1 > file1 > file2 > ..

# خروجی تک لوله به چندین ورودی
$ zcat foobar.Z >> (gzip -9 > file1.gz)
>> (bzip2 -9 > file1.bz2)
>> (acb --best > file1.acb)

# ضمیمه / و غیره / خدمات در انتهای فایل 'foo' و 'bar'
گربه دلار / و غیره / خدمات >> فو >> بار

# لوله STDERR
$ echo یک خطا >&2 2>&1 | sed -e 's/A/I/'

# خروجی استاندارد یک فرآیند را به ورودی استاندارد چندین فرآیند ارسال کنید
# در خط لوله
$ setopt multios
$ process1 > > (process1) > > (process2)

# مقداردهی اولیه یک متغیر و حفظ خروجی ترمینال به طور همزمان
$ setopt multios
$ { a=$(command >&1 >& 3 3 > &- 2>&1);} 3>&1

# stderr را دو بار تغییر مسیر دهید
$ setopt multios ; برنامه 2> file2 > file1 2>&1

# کپی کردن stdout و stderr در یک logfile
$ exec 3>&1 > logfile 2>&2 2>&1 >&3 3>&-

# stderr (فقط) را به یک فایل و به orig هدایت کنید. stderr:
دستور $ 2>&2 2>stderr
# stderr و stdout را به فایل‌های جداگانه و هر دو به orig هدایت کنید. stdout:
دستور $ 2>&1 1>&1 2>stderr 1>stdout
# stderr و stdout را برای جدا کردن فایلها و stdout به orig هدایت کنید. stdout
# AND stderr به orig. stderr:
دستور $ 2>&2 1>&1 2>stderr 1>stdout

# سرگرم کننده بیشتر با STDERR ؛)
$ ./my-script.sh 2> >(grep -v moron >error.log)|process-output >output.log
$ echo "Thats STDOUT" >>(sed 's/stdout/یک مثال دیگر/' > foobar)

ZMV-نمونه ها (نیاز بارگیری خودکار zmv)
توجه داشته باشید: -n به معنی عدم اجرا (فقط آنچه را که اتفاق می افتد چاپ کنید). در

# کاراکترهای غیرقانونی را در سیستم فایل fat32 حذف کنید. شخصیت های غیر قانونی هستند
# / : ; *؟ " < > |
# توجه: «-Q» و (D) شامل فایل‌های پنهان است.
$ unwanted='[:;*?\"<>|]'
$zmv -Q "(**/)(*$~ناخواسته*)(D)" '$1${2//$~unwanted/}'

# تغییر بخشی از نام فایل (به عنوان مثال "file-hell.name" -> "file-heaven.name")
$zmv '(*)جهنم(*)' '${1}بهشت${2}'
# یا
$ zmv '*' '$f:s/جهنم/بهشت/'

# براکت گرد را در نام فایل ها حذف کنید
# ie foo-(bar).avi -> foo-bar.avi
$ zmv '*' '${f//[()]/}'

# سریال تمام فایل ها (foo.foo > 1.foo، fnord.foo > 2.foo، ..)
بارگذاری خودکار 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

# تغییر نام "file.with.many.dots.txt" با جایگزین کردن نقاط (به استثنای آخرین
# یک!) با فاصله
$ {1..20}-file.with.many.dots.txt را لمس کنید
$ zmv '(*.*)(.*)' '${1//./ }$2

# 4 کاراکتر اول را از نام فایل حذف کنید
$ zmv -n '*' '$f[5,-1]' # توجه: "5" در نوشتن اشتباه نیست!

# نام همه فایل‌ها را که تحت Dir فعلی قرار دارند به حروف کوچک تغییر نام دهید، اما نگه دارید
# dirname همانطور که هست.
$ zmv -Qv '(**/)(*)(.D)' '$1${(L)2}'

# همه کاراکتر 4 که "1" است، با "2" و غیره جایگزین کنید
$ autoload -U zmv
$ zmv '(???)1(???[1-4].txt)' '${1}2${2}'

# 15 کاراکتر اول را از یک رشته حذف کنید
$ touch 111111111111111{az}
بارگذاری خودکار zmv $
$ zmv '*' '$f[16,-1]'

# فاصله ها (هر تعداد از آنها) را با یک خط تیره در نام فایل ها جایگزین کنید
$ آپلود zmv
$ zmv -n '(**/)(* *)' '$1${2//( #-## #| ##)/-}'
# یا - با Bash
$ پیدا کنید. -depth -name '* *' -exec bash -c'
> shopt -s extglob
> file=$1
> dir=${file%/*}
> name=${پرونده##*/}
> newname=${name//*([ -]) *([ -])/-}
> mv -i -- "$file" "$Dir/$newname"' {} {} \;

# نام فایل ها را پاک کنید و کاراکترهای خاص را حذف کنید
بارگذاری خودکار zmv $
$ zmv -n '(**/)(*)' '$1${2//[^A-Za-z0-9._]/_}'

# *.py را به دسته ای از اسکریپت های پایتون در یک فهرست اضافه کنید (بعضی از آنها پایان می یابند
# در *.py و به همه آنها پسوند مناسب بدهید
بارگذاری خودکار zmv $
$ zmv -n '(**/)(con*)(#qe,پرونده $REPLY | grep "اسکریپت پایتون"،)' '$1$2.py'

# حروف کوچک همه پسوندها (به عنوان مثال *.JPG) شامل. زیر پوشه ها
بارگذاری خودکار zmv $
$ zmv '(**/)(*).(#i)jpg' '$1$2.jpg'
# یا - بدون Zsh
$ پیدا کردن Dir -name '*.[jJ][pP][gG]' -print | در حالی که f
> انجام دهید
> مورد $f در
> *.jpg)؛
> *) mv "$f" "${f%.*}.jpg" loading="lazy" ;
> اساک
> انجام شد

# صفرهای پیشرو را از پسوند فایل حذف کنید
بارگذاری خودکار zmv $
ls دلار
filename.001 filename.003 filename.005 filename.007 filename.009
filename.002 filename.004 filename.006 filename.008 filename.010
$ zmv '(نام فایل.)0##(?*)' '$1$2'
ls دلار
نام فایل.1 نام فایل.10نام فایل.2نام فایل.3نام فایل.4نام فایل.5 ..

# فایل ها را مجددا شماره گذاری کنید.
بارگذاری خودکار 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 ...

# افزودن صفرهای ابتدایی به نام فایل (1.jpg -> 001.jpg، ..
بارگذاری خودکار zmv $
$ zmv '(<1->).jpg' '${(l:3::0:)1}.jpg'

# بالا را ببینید، اما اکنون فقط فایل هایی با نام فایل >= 30 کاراکتر
بارگذاری خودکار zmv $
$ c=1 zmv "${(l:30-4::?:)}*.foo" '$((c++)).foo'

# فاصله های موجود در نام فایل ها را با یک زیر خط جایگزین کنید
بارگذاری خودکار zmv $
$ zmv '* *' '$f:gs/ /_'

# پسوند را از *.sh به *.pl تغییر دهید
بارگذاری خودکار zmv $
$ zmv -W '*.sh' '*.pl'

# افزودن پسوند «.txt» به همه فایل‌های داخل ${HOME}
# «-.» فقط برای تغییر نام فایل های معمولی یا پیوندهای نمادین به فایل های معمولی است.
# "D" برای تغییر نام فایل های مخفی (dotfiles)) است.
بارگذاری خودکار zmv $
$ zmv -Q '/ خانه /***/*(D-.)' '$f.txt'
# یا فقط برای تغییر نام فایل هایی که پسوند ندارند:
$ zmv -Q '/ خانه /**/^؟*.*(D-.)' '$f.txt'

# به صورت بازگشتی نام فایل ها را با کاراکتر تغییر دهید؟ [ ] / = + < > ; : "، - *
بارگذاری خودکار zmv $
$ chars='[][?=+<>;",*-]'
$zmv '(**/)(*)' '$1${2//$~chars/%}'

# حذف نقل قول از نام فایل ها (به صورت بازگشتی)
بارگذاری خودکار zmv $
$ zmv -Q "(**/)(*'*)(D)" "\$1\${2//'/}"

# هنگامی که یک فایل جدید می رسد (به نام file.txt) نام همه فایل ها را تغییر دهید
# get (به عنوان مثال file119.txt تبدیل به file120.txt، file118.txt تبدیل می شود
# file119.txt و به همین ترتیب با file.txt به file1.txt ختم می شود
بارگذاری خودکار zmv $
$ zmv -fQ 'file([0-9]##).txt(روشن)' 'file$(($1 + 1)).txt'

# حروف کوچک/بزرگ همه فایل ها/دایرکتوری ها
بارگذاری خودکار zmv $
$zmv '(*)' '${(L)1}' # کوچک
$zmv '(*)' '${(U)1}' # بزرگ

# پسوند *.c را از تمام فایل های C حذف کنید
بارگذاری خودکار zmv $
$ zmv '(*).c' '$1'

# فقط حرف اول همه فایل های *.mp3 - بزرگ
بارگذاری خودکار zmv $
$ zmv '([az])(*).mp3' '${(C)1}$2.mp3'

# هدف "README" را در همان دایرکتوری هر "Makefile" کپی کنید.
بارگذاری خودکار zmv $
$ zmv -C '(**/)Makefile' '${1}README'

# حذف نقل قول از نام فایل ها (به صورت بازگشتی)
بارگذاری خودکار zmv $
$ zmv -Q "(**/)(*'*)(D)" "\$1\${2//'/}"

# تغییر نام pic1.jpg، pic2.jpg، .. به pic0001.jpg، pic0002.jpg، ..
بارگذاری خودکار zmv $
$ zmv 'pic(*).jpg' 'pic${(l:4::0:)1}.jpg'
$zmv '(**/)pic(*).jpg' '$1/pic${(l:4::0:)2}.jpg' # به صورت بازگشتی

ماژول-نمونه ها
لطفا بخوان zshmodules(1) اول!

zsh/pcre (نیاز zmodload zsh/pcre)
# فایل های یک دوره معین را کپی کنید (تاریخ مشخص شده در نام فایل ها)
$ zmodload zsh/pcre
$ ls -d -- *(e:'[[ $REPLY -pcre-match pcre-regexp ]]':)
# یا
$ m() { [[ $1 -pcre-match pcre-regexp ]] }
$ ls -d -- *(+m)

zsh/clone (نیاز zmodload zsh/clone)
# یک نمونه فورک شده از پوسته فعلی ایجاد می کند ($! روی صفر تنظیم شده است) و
# "فرمان" را در /dev/tty8 (برای این مثال) اجرا کنید.
$ zmodload zsh/clone
دستور $ clone /dev/tty8 && (($! == 0)) && exec

zsh/تاریخ (نیاز zmodload zsh/تاریخ)
$ zmodload zsh/datetime
$ alias datereplacement='strftime "%Y-%m-%d" $EPOCHSECONDS'
$ export DATE=`datereplacement`
$ اکو $DATE

# تاریخ نوار از نام فایل
$ $ zmodload zsh/datetime
$ setopt extendedglob
$ لمس aaa_bbb_20041212_c.dat eee_fff_20051019_g.dat
الگوی $ strftime -s
'???_???_<0-%Y%m%d>_?.dat' $((EPOCHSECONDS - 365 * 24 * 60 * 60 / 2))
$ print -rl -- $~ الگو
aaa_bbb_20041212_c.dat
$ print -rl -- $pattern
???_???_<0-20050815>_?.dat

# اندازه فایلهای جستجو == 0، بر اساس نام فایل حاوی تاریخ است
# به جای تاریخ "آخرین اصلاح" فایل
$ zmodload -i zsh/datetime
$ strftime -s فایل "abc_de_%m%d%Y.dat" $((EPOCHSECONDS - 24 * 60 * 60 ))
$ files=(**/$file(N.L0))
$ (( $#files > 0 )) && print -rl -- $files |
mailx -s "فایل های خالی" foo@bar.tdl

zsh/stat (نیاز zmodload zsh/stat)
# تست کنید که آیا یک پیوند نمادین به یک فایل خاص پیوند دارد
$ zmodload -i zsh/stat
$! stat -LH s foo.ln || [[ $s[link] != "foo.exe" ]] || ln -sf foo.exe foo.ln

# مقایسه تاریخ فایل
$ zmodload zsh/stat
$ file1=foo
$ file2 = نوار
نوار لمسی $ و خواب 5 و لمسی فو
$ echo $file1 $(($(stat +mtime $file2) است -
$(stat +mtime $file1))) چند ثانیه قدیمی تر از $file2.
نوار 5 ثانیه قدیمی تر از foo است

# فایل های یک دیسک کوچکتر از فایل های دیگر را فهرست کنید
$ zmodload zsh/stat
$ stat -یک فایل حداکثر + اندازه یک فایل دیگر
$ print -rl ./**/*(DL-$max)

# 100 فایل برتر در یک دیسک را فهرست کنید
$ zmodload zsh/stat
$ ls -fld ./**/*(d`stat +device .`OL[1,100])

# فقط نام کاربری و نام فایل ها را از (مانند
# ls -l * | awk "{print $3" "$8}")
$ zmodload zsh/stat
$ برای فایل؛ انجام دادن
> stat -sA user +uid -- "$file" &&
> print -r -- "$user" "$file"
> انجام شد

# تفاوت بین بایت های واقعی فایل و بایت های اختصاص داده شده فایل را دریافت کنید
$ zmodload zsh/stat
$ print $(($(stat +block -- file) * 512 - $(stat +size -- file)))

# بزرگترین فایل را پیدا کنید
# "D" : برای گنجاندن فایل‌های نقطه‌ای (d با حروف کوچک برای دستگاه است)
# "O": ترتیب معکوس (o حروف کوچک برای ترتیب غیر معکوس)
# ``L'': بر اساس طول فایل (l برای تعداد پیوندها است)
# ``[1]'': فقط اولین مورد را برگردانید
$ zmodload zsh/stat
$ stat +size ./*(DOL[1])

# اندازه فایل بر حسب بایت
$ zmodload zsh/stat
$ stat -L +size ~ / .zshrc
4707

# فایل‌های موجود در فهرستی را که در ده روز گذشته به آن دسترسی نداشته‌اید حذف کنید
# و یک ایمیل برای صاحب فایل ها ارسال کنید و او را از فایل ها مطلع کنید.
#حذف
$ zmodload zsh/stat zsh/files
تایپ $ -A f; f=()
$ rm -f /path/**/*(.a+10e{'stat -sA u +uidr $REPLY; f[$u]="$f[$u]$REPLY"'})
$ برای کاربر (${(k)f}) {print -rn $f[$user]|mailx -s "..." $user}

# یک "ls -l" روی تمام فایل‌های درختی که جوان‌تر از a هستند دریافت کنید
# سن مشخص شده
$ zmodload zsh/stat
$ برای روز (. ./**/*(N/m-2))
> print -r -- $'\n'$d: && cd $d && {
> برای 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]}
> سی دی ~-
> }

# تاریخ ایجاد فایل را دریافت کنید
$ zmodload zsh/stat
$ stat -F '%d %m %Y' +mtime ~ / .zshrc
30 06 2004
$ stat -F '%D' +mtime ~ / .zshrc
06/30/04

zsh/فایل ها (نیاز zmodload zsh/فایل)
# در پوشه ای برای فایل های حاوی رشته خاصی جستجو کنید سپس آن ها را کپی کنید
# فایل به فهرستی دیگر.
$ zmodload zsh/files
$ IFS=$'\0'
$ cp $(grep -lZr foobar .) otherdirectory

zsh/mapfile (نیاز zmodload zsh/mapfile)
# grepping برای دو الگو
$ zmodload zsh/mapfile
$ pattern1="foo"
$ pattern2 = نوار غذا
$ print -l ./**/*(DN.e{'z=$mapfile[$REPLY] && [[ $z = *$pattern1* &&
$z = *$pattern2* ]]'})
# یا یک راه حل در ترکیب با zsh/pcre
$ zmodload -i zsh/mapfile zsh/pcre
$ pattern1="foo"
$ pattern2 = نوار غذا
$ pcre_compile "(?s)(?=.*?$pattern1).*?$pattern2"
$ pcre_study
$ print -l ./**/*(DN.e{'pcre_match $mapfile[$REPLY]'})

# معادل برای «کمتر / etc / passwd | grep -v root''
$ zmodload zsh/mapfile
$ IFS=$'\n\n'
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*ریشه*}
# یا - برای حروف بزرگ و کوچک
$ setopt extendedglob
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*(#i)root*}

# اگر یک فایل XML حاوی مواردی مانند `` باشد '' و `` ''، عدد
# این تگ های خالی (آنهایی که به '/>' ختم می شوند) بنابراین اگر با همان تگ مواجه شوید
# سفارش، تگ های قبلی "" می شوند 1 '' و
# `` 2 ''
$ zmodload zsh/mapfile
$ cnt=0
$ apfile[data.xml.new]=${(S)mapfile[data.xml]//
> (#IM) *<\/TAGA>/ $((++cnt))<\/TAGA>}

# حذف همه فایل‌های کاربران Maildir/new که حاوی "filename="gone.src" هستند
$ zmodload zsh/{files,mapfile}
$ rm -f /u1/??/*/Maildir/new/100*(.e{'[[ $mapfile[$REPLY] ==
*filename=\"gone.scr\"* ]]'})

# عنوان را از یک فایل پس‌اسکریپت بردارید و آن مقدار را به آن اضافه کنید
# انتهای نام فایل
$ autoload -U zmv
$ zmodload zsh/mapfile
$ zmv '(*).ps' '$1-${${${mapfile[$f]##*%%Title: }%% *}//[^a-zA-Z0-9_]/}. ps'

zsh/mathfunc (نیاز 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
$ چاپ $((1e12 * rand48()))
847909677310.23413
$ چاپ $(( rand48(seed) ))
0.01043488334700271

zsh/termcap (نیاز 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}سبز ${YELLOW}زرد ${RED}قرمز ${BRIGHTRED}روشن

zsh/zpty (نیاز zmodload zsh/zpty)
$ zmodload zsh/zpty
$ zpty PW passwd $1
$ zpty PW passwd $1
# ``-r'': خروجی نام دستور را بخوانید.
# ``z'' : پارامتر
$ zpty -r PW z '*رمز عبور:'
# به نام دستور رشته های داده شده را به عنوان ورودی ارسال کنید
$ zpty -w PW $2
$ zpty -r PW z '*رمز عبور:'
$ zpty -w PW $2
# فرم دوم با گزینه -d برای حذف دستورات استفاده می شود
# قبلاً با ارائه لیستی از اسامی آنها شروع شده است. اگر نامی وجود ندارد
# داده می شود، همه دستورات حذف می شوند. حذف یک دستور باعث ایجاد HUP می شود
# سیگنال برای ارسال به فرآیند مربوطه.
$ zpty -d PW

zsh/net/سوکت (نیاز zmodload zsh/net/socket)
# ``-l'': یک سوکت در حال گوش دادن به نام فایل را باز کنید
# ``-d'': آرگومان به عنوان توصیفگر فایل مورد نظر در نظر گرفته می شود
# ارتباط
# ``3'' : توصیف کننده فایل. به "راهنمای کاربری Z-Shell" مراجعه کنید
# (3.7.2: توصیف کننده فایل)
$ zmodload zsh/net/socket
$ zsocket -l -d 3
# "-a": یک اتصال ورودی به سوکت را بپذیرید
$ zsocket -a -d 4 3
$ zsocket -a -d 5 3 # یک اتصال را بپذیرید
$ echo foobar >&4
$ echo barfoo >&5
$ 4>&- 5>&- 3>&

zsh/zftp (نیاز zmodload zsh/zftp)
$ autoload -U zfinit
zfinit دلار
$ zfparams www.example.invalid myuserid mypassword
zfopen $
نکات zfcd $
$ zfls -l zshtips.html
$ zfput zshtips.html
$ zfls -l zshtips.html

# انتقال خودکار فایل ها با استفاده از FTP با بررسی خطا
$ autoload -U zfinit ; zfinit
$ zftp host.name.unvalid user passwd || را باز کنید خروج
zftp $ دریافت / راه دور / فایل > /local/file; r=$؟
zftp $ بستن && خروج r

# فشرده سازی و ftp در پرواز
$ autoload -U zfinit ; zfinit
$ zftp host.name.گذرواژه کاربر نامعتبر را باز کنید
zftp $ دریافت $file | bzip2 > ${file}.bz2
$ zftp بسته شود

# بازگشت "دریافت"
$ autoload -U zfinit ; zfinit
$ zfanon cr.yp.to
$ zfcd daemontools
$ برای فایل در `zfls` ; انجام دادن
> zfget $file
$ انجام شد
$ zfclose

# همه فایل‌های معمولی را در $HOME/foobar (بازگردانی) که جدیدتر از آن هستند آپلود کنید
# دو ساعت به 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

# لیست طولانی فایل ها در ftp
$ autoload -U zfinit ; zfinit
$ zfopen مقداری میزبان
$ zfcd /some/remote/Dir
$ cd /some/local/Dir
# اگر list.txt در میزبان راه دور قرار دارد، به آن تغییر دهید
# zfget ${(f)"$(zftp get /path/to/remote/list.txt)"}
$ zfget ${(f)"$(cat list.txt)"}
$ zfclose

zsh/zselect (نیاز zmodload zsh/zselect)
# شبیه به
، ----
| $ sg=$(stty -g)
| $ stty -icanon حداقل 0 زمان 50
| $ بخوانید بله
| $ stty "$sg"
| $ مورد "$yesno" در
| > بله) command1;;
| > *) command2;;
| > اساک
`----
$ zmodload zsh/zselect
$ if zselect -t 500 -r 0 && yesno را بخوانید && [ yes = "$yesno" ]; سپس
> فرمان 1
> دیگر
> فرمان 1
> فی

OPTIONS


جهت یابی گزینه های
auto_cd (با وارد کردن دستور به دایرکتوری اجازه تغییر آن را بدهید). auto_pushd
(به طور خودکار Dirs را به لیست پوش/پاپ اضافه کنید) pushd_ignore_dups (و کپی نکنید
آنها)

متفرقه
no_hup (هنگام خروج از ZSH سیگنال HUP را به کارهای پس زمینه ارسال نکنید). print_exit_value (نشان دادن
یک پیام با کد خروج زمانی که یک فرمان با یک کد خروج غیر صفر برمی گردد)

تاریخچه گزینه های
hist_verify (به کاربر اجازه دهید پس از گسترش تاریخچه خط فرمان را ویرایش کند (به عنوان مثال !ls)
به جای اجرای فوری آن) از یک فایل تاریخچه برای همه جلسات استفاده کنید: تنظیم
SHARE_HISTORY

حریم خصوصی / دوربین های مداربسته
no_clobber (یا تنظیم -C؛ جلوگیری > تغییر مسیر از کوتاه کردن فایل داده شده در صورت وجود آن
همین الان هم وجود داره)

هجی اصلاح
اصلاح (به طور خودکار املای دستورات را تصحیح کنید). درست_همه (بطور خودکار
تصحیح املای هر کلمه در خط فرمان) دووراک (طرح دووراک)

طبقه بندی نشده / متفرقه


Mailpath: مسیر پستی چندگانه ساده:

mailpath=($HOME/Mail/mbox'? نامه جدید در mbox'
$HOME/Mail/tux.u-strasbg'?ایمیل جدید در تاکس'
$HOME/Mail/lilo'?ایمیل جدید در lilo'
$HOME/Mail/ldap-fr'؟ نامه جدید در ldap-fr')

Mailpath: مسیر پستی پویا:

typeset -a mailpath
برای من در ~/ایمیل/فهرست/*(.)؛ انجام دادن
mailpath[$#mailpath+1]="${i}؟ ایمیل جدیدی در ${i:t} دارید."
انجام شده

از globbing در دستورات خاص خودداری کنید:

برای com با نام مستعار expr mattrib mcopy mdir mdel را پیدا کنید که;
نام مستعار $com="noglob $com"

برای انتقال bashprompt خود به zsh از اسکریپت bash2zshprompt واقع در zsh استفاده کنید.
توزیع منبع تحت متفرقه.

برای انتقال از (t)csh به zsh از ابزار c2z استفاده کنید که نام مستعار و csh را تبدیل می کند.
محیط و متغیرهای پوسته به zsh. این کار را با اجرای csh و داشتن گزارش csh انجام می دهد
در نام مستعار و متغیرها سپس اسکریپت آنها را به فایل های راه اندازی zsh تبدیل می کند. مقداری دارد
مسائل و اطلاعات استفاده که در بالای این اسکریپت مستند شده است.

در اینجا توابعی برای تنظیم عنوان و وضعیت سخت وجود دارد XTerm یا از گنو پرده به zsh و
دایرکتوری فعلی، به ترتیب، زمانی که اعلان نمایش داده می شود، و به نام فرمان
و بقیه خط فرمان، به ترتیب، زمانی که یک دستور اجرا می شود:

عنوان تابع {
اگر [[ $TERM == "صفحه نمایش" ]]; سپس
# از این دو برای صفحه گنو استفاده کنید:
print -nR $' 33k'$1$' 33'
print -nR $' 33]0;'$2$''
elif [[ $TERM == "xterm" || $TERM == "rxvt" ]]; سپس
# در عوض برای XTerms از این یکی استفاده کنید:
print -nR $' 33]0;'$*$''
fi
}
تابع precmd { عنوان zsh "$PWD" }
تابع preexec {
شبیه سازی -L zsh
محلی -a cmd; cmd=(${(z)1})
عنوان $cmd[1]:t "$cmd[2,-1]"
}

خط زیر را در خود قرار دهید ~/.screenrc برای دیدن این وضعیت سخت فانتزی:

عنوان همیشه "%3n %t%? (%u)%?%?: %h%؟

متغیرهای ویژه ای که به آنها اختصاص داده شده است:

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

لینک ها


سایت اولیه

http://www.zsh.org/

صفحه پروژه

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

صفحه پوسته Z در sunsite.dk

http://zsh.sunsite.dk/

از Bash تا Z Shell: Conquering the Command Line - کتاب

http://www.bash2zsh.com/

"Zsh - die magische Shell" (کتاب آلمانی در مورد Zsh) توسط Sven Guckes و Julius Plenz

http://zshbuch.org/

فهرست پستی

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

ZSH-سوالات متداول

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

راهنمای کاربر

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

ZSH-Wiki

http://zshwiki.org/home/

مقدمه ای کوتاه از BYU

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

پشتیبانی از ماوس ;)

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

پرده بالا: معرفی پوسته Z

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

ZSH-Liebhaberseite (آلمانی)

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

ZSH-Seite von Michael Prokop (آلمانی)

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

معرفی سریع ZSH

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

صفحه Adam's ZSH

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

Zzappers بهترین نکات ZSH

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

صفحه وب Zsh توسط کریستین اشنایدر

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

صفحه وب zsh-lovers

http://grml.org/zsh/

کانال IRC

#zsh at irc.freenode.org

کارت مرجع پوسته Z (شامل بسته zsh-lovers debian)

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

AUTHORS


این manpage توسط Michael Prokop، مسیحی نوشته شده است تخته سنگ اشنایدر و ماتیاس
کوپفرمن. اما بسیاری از ایده‌ها از zsh-geeks گرفته شده است، به عنوان مثال از فهرست‌های پستی zsh
(zsh-users و zsh-workers)، google، گروه های خبری و zsh-Wiki. ممنون از خونسردی شما و
نکات باور نکردنی ما چیزهای زیادی از شما یاد گرفتیم!

به ترتیب حروف الفبا:

اندرو "زفرام" اصلی - http://www.fysh.org/~zefram/
بارتون ای. شفر - http://www.well.com/user/barts/
ماتیاس کوپفرمن - http://www.infodrom.north.de/~matthi/
الیور کیدل - http://people.freenet.de/opk/
پل فالستاد - http://www.falstad.com/
پیتر استفنسون - http://homepage.ntlworld.com/p.w.stephenson/
ریچارد کلمن
استفان شازلاس - http://stephane.chazelas.free.fr/
سون گوکس - http://www.guckes.net/
سون ویشنوسکی - http://w9y.de/zsh/zshrc

از zsh-lovers آنلاین با استفاده از خدمات onworks.net استفاده کنید



جدیدترین برنامه های آنلاین لینوکس و ویندوز