англійськафранцузькаіспанська

Ad


Значок OnWorks

zsh-lovers - онлайн у хмарі

Запустіть zsh-lovers у безкоштовному хостинг-провайдері OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда zsh-lovers, яку можна запустити в безкоштовному хостинг-провайдері OnWorks за допомогою однієї з наших безкоштовних онлайн-робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


zsh-lovers - поради, прийоми та приклади для оболонки Z

СИНТАКСИС


Просто прочитайте. ;-)

ОГЛЯД


Кожного разу, коли ми дивимося на посібник з zsh, ми дивуємося, чому немає прикладів або вони просто
речі в (оболонці) життя. Zsh містить багато функцій, але не було сторінки довідки з деякими
приклади (як procmailex(5)). Ось чому ми написали цю сторінку керівництва.

Більшість трюків і однострочок надходять зі списків розсилки zsh-users, zsh-workers, google,
групи новин і від нас самих. Дивіться розділ ПОСИЛАННЯ for details.

Примітка. Ця довідкова сторінка (любителі зш(1)) є НЕ офіційна частина оболонки Z! Це просто просто
для розваги - сторінка керівництва ;) Щоб отримати коментарі, звіти про помилки та відгуки, швидко подивіться на
розділ БУГИ.

SHELL-СКРИПТИ


У цьому розділі наведено кілька прикладів часто потрібних матеріалів shellscript. Зверніть увагу, що ви
не слід використовувати, інакше більшість прикладів не працюватимуть. Параметри аналізу в сценаріях оболонки. приклад
взято з 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 Використання: $(basename "$0") "[-p ПОРТ] [-r КАТАЛОГ]"
вихід 1
fi

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

if [[ $root[1] != '/' ]]; потім root="$PWD/$root"; фі
}
# тепер використовуйте функцію:
parse_options $*

ПРИКЛАДИ


Доступні підрозділи псевдонімами, Завершення, Не відсортовано/Різне Приклади, (рекурсивний)
Глобінг - прикладів, Модифікатори використання, Перенаправлення – приклади, ЗМВ-Приклади та
Модуль-Приклади.

Псевдоніми
Псевдоніми суфіксів підтримуються в zsh з версії 4.2.0. Деякі приклади:

псевдонім -s tex=vim
псевдонім -s html=w3m
псевдонім -s org=w3m

Тепер натисніть клавішу повернення після введення foobar.tex запускає vim з foobar.tex. Виклик а
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='|& голова'
псевдонім -g EL='|& less'
псевдонім -g ELS='|& less -S'
псевдонім -g ETL='|& tail -20'
псевдонім -g ET='|& tail'
псевдонім -g F=' | fmt -'
псевдонім -g G='| egrep'
псевдонім -g H='| голова'
псевдонім -g HL='|& голова -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='| сортувати -nr'
псевдонім -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, працюють дуже повільно. Ви можете використовувати кеш для проксі
список результатів (наприклад, список доступних пакунків debian) Використовуйте кеш:

zstyle ':completion:*' use-cache on
zstyle ':completion:*' шлях до кешу ~/.zsh/кеш

Запобігання заповненню файлів/каталогів CVS:

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

Нечітка відповідність завершень, коли ви їх неправильно вводите:

zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' лише оригінал
zstyle ':completion:*:approximate:*' max-errors 1 числова

І якщо ви хочете, щоб кількість помилок, дозволених _approximate, збільшувалася разом із довжиною
з того, що ви набрали досі:

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

Ігноруйте функції завершення для команд, яких у вас немає:

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-slashes true

cd ніколи не вибере батьківський каталог (наприклад: cd ../ ):

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

Інший метод для швидкий зміна каталоги. Додайте це до свого ~ / .zshrc, тоді просто введіть
«cd ..../dir»

rationalise-dot() {
if [[ $LBUFFER = *.. ]]; потім
LBUFFER+=/ ..
ще
LBUFFER+=.
fi
}
zle -N раціоналізація-точка
ключ прив'язки. раціоналізація-точка

НЕВОРТУВАНЕ/РІЗНЕ Приклади
Підказка: список дійсних кваліфікаторів glob можна знайти в zshexpn(1). Див. “man 1 zshexpn |
менше -p” Кваліфікатори для деталей.

# Отримати імена всіх файлів, які *не* відповідають шаблону *ніде* на
# файл (і без ``-L'', оскільки він GNUish)
$ print -rl -- *(.^e{'grep -q шаблон $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::):-hello}}}"

# Показати найновіший каталог
$ls -ld *(/om[1])

# випадковий елемент масиву
$ FILES=( .../файли/* )
$ feh $FILES[$RANDOM%$#FILES+1]

# cat перший рядок у всіх файлах у цьому каталозі
$ для файлу (*(ND-.)) IFS= read -re < $file

# перевірити, чи є параметр числовим
$ if [[ $1 == <-> ]] ; потім
луна числова
ще
echo нечисловий
fi

# Показати всі файли .c, для яких не існує файлу .o.
$ print *.c(e_'[[ ! -e $REPLY:ro ]]'_)

# Усі файли в /був/ якими не володіє root
$ls -ld /був/*(^u:корінь)

# Усі файли, для яких власник має дозволи на читання та виконання
$ 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]))
$ (($#файл)) && grep -l ORA- $файл
# без Зш
$ files=$( find . -name . -o -prune -name 'fgractg*>log' -mtime 0 -print )
> if [ -n "$files" ]; потім
> IFS='
> '
> встановити -f
> file=$(ls -td $files | head -1)
> grep -l ORA- "$файл"
> fi

# підтримувати запущену вказану кількість дочірніх процесів до завершення всього завдання
$ 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 (Linux)
$ print ${${$(LC_ALL=C / sbin / ifconfig eth0)[7]}:gs/addr://}
# ifconfig з 4.2BSD {Free,Net,Open}BSD
$ print ${$(/ sbin / ifconfig tun0)[6]}

# Перевірте всі IP-адреси в кількох класах C або на всіх хостах
# в / Etc / хостів
$ для i в {1..254}; зробити ping -c 1 192.168.13.$i; зроблено
or
$ I=1
$ while ( [[ $I -le 255 ]] ) ; зробити ping -1 2 150.150.150.$I; нехай I++; зроблено
or
$ для i в $(sed 's/#.*//' > / Etc / хостів | 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 в *; do mv $j $i.$j; ((i++)); зроблено
$ i=1; для f в *; do mv $f $(echo $i | \
awk '{ printf("%03d", $0)}').$f; ((i++)); зроблено
$ integer i=0; для f в *; do mv $f $[i+=1].$f; зроблено

# Знайти (і надрукувати) усі символічні посилання без цілі в поточному
# dirtree.
$ $ файл **/*(D@) | fgrep зламано
$ для i в **/*(D@); [[ -f $i || -d $i ]] || echo $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'', ..
# (під Linux)
$ pid2 () {
> місцевий i
> для мене в /proc/<->/стат
> робити
> [[ "$(< $i)" = *\((${(j:|:)~@})\)* ]] && echo $i:h:t
> зроблено
> }

# для X у 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y'; робити...
$ for (( i = 36#n; i <= 36#y; i++ )); робити
> надрукувати ${$(([##36]i)):l}
> зроблено
# або в поєднанні з ``dc''
$ print {$((##n))..$((##y))}P\ 10P | dc
# або з ``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 цифр з нулем на початку.
$ 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 **/*(м-2)
# Це дасть вам перелік 1 рядок perl файлу (а не à la ls -R).
# Подумайте про простий спосіб отримати вивід у стилі "ls -R".
# лише файли, новіші за 2 дні.
$ для d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Нм-2))
> (($#l)) && ls -ltd -- $l
> cd ~-
> }
> }
# Якщо ви також хочете, щоб каталоги були включені, навіть якщо їх mtime
# більше 2 днів тому:
$ для d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Н/,м-2))
> (($#l)) && ls -ltd -- $l
> cd ~-
> }
> }
# І якщо ви хочете, щоб у списку були лише каталоги з mtime < 2 днів:
$ для d (. ./**/*(Н/м-2)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Нм-2))
> (($#l)) && ls -ltd -- $l
> cd ~-
> }
> }

# print 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-файли з назви з пробілами.mp3 на назву з пробілами.mp3
$ for 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,
# наприклад файл.wav -> файл.mp3)
$ for i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}

# Завантажити зі створеними файлами LaTeX2HTML (наприклад, ZSH-Guide):
$ за f в http://zsh.sunsite.dk/Guide/zshguide{,{01..08}}.html; робити
> lynx -джерело $f >${f:t}
> зроблено

# Перемістіть усі файли в каталогах dir1 і dir2, кількість рядків яких перевищує 10
# інший каталог скаже "/more10"
$ mv dir[12]/**/*.cr(-.e{'((`wc -l < ​​$REPLY` > 10))'}) /more10

# Створіть за допомогою dpkg головний список усіх встановлених файлів
$ diff <(знайти / | сортувати) <(кат /var/lib/dpkg/info/*.list | сортувати)

# Замініть цю довбану Escape-послідовність:
$автозавантаження кольорів; кольори
$ print "$bg[cyan]$fg[blue]Ти ідіот" >> /dev/pts/3

# Отримати значення ASCII символу
$ char=N ; надрукувати $((#char))

# Назва файлу "Erweiterung"
# Примітка: (N) говорить про використання параметра nullglob для цього конкретного
# шаблон кулі.
$ для i в *.o(N); робити
> rm $i
> зроблено

# Перейменування файлів; тобто FOO на foo і bar на BAR
$ для i в *(.); mv $i ${i:l} # `FOO' до `foo'
$ для i в *(.); mv $i ${i:u} # `бар до `БАР'

# Показати всі 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(.))"}

# Маленький однорядковий файл, який читає зі стандартного вводу та першим виводить на стандартний вихід
# унікальний рядок, тобто не друкує рядки, які були надруковані раніше
# (це схоже на унікальну команду, але unique може обробляти лише
# суміжні рядки).
$ 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

# перевірка змінних без урахування регістру
$ if [[ $OSTYPE == (#i)LINUX*(#I) ]]; потім
> echo "Пінгвін на борту."
> інше
> echo "Не Linux."
> fi

(рекурсивний) Глобінг - прикладів
Список дійсних кваліфікаторів glob можна знайти в zshexpn(1). Примітка: **/ еквівалентно
(*/)#! Наприклад:

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

# Шукайте `README' у всіх підкаталогах
$ ls -l **/README

# знайти каталоги, які містять і «index.php», і «index.html», або in
# загальні, каталоги, які містять більше одного файлу, що відповідає "index.*"
$ ls **/*(D/e:'[[ -e $REPLY/index.php && -e $REPLY/index.html ]]':)
# або
$ ls **/*(D/e:'l=($REPLY/index.*(N)); (( $#l >= 2 ))':)

# Знайти команду для пошуку імені каталогу замість базового імені
$ print -rl /**/*~^*/шлях(|/*)
# або - без Зш
$ знайти / | grep -e /шлях/ -e '/шлях$'

# Вивести шлях до каталогів, що містять десять найбільших звичайних файлів C
# у поточному каталозі та підкаталогах.
$ print -rl -- **/*.c(D.OL[1,10]:h) | сортувати -u

# Знайдіть файли розміром == 0 і надішліть лист
$ файлів=(**/*(ND.L0m+0m-2))
> (( $#files > 0 )) && print -rl -- $files | \
mailx -s "порожні файли" [захищено електронною поштою]

# рекурсивний chmod
$ chmod 700 **/(.) # Тільки файли
$ chmod 700 **/(/) # Тільки каталоги

# роздрукувати всі файли в цьому каталозі у 2 стовпцях
$ print -rC2 -- ${1:[...]}/*(D:t)
# ^- кількість ob стовпців
# або - якщо вас турбують спеціальні символи - використовуйте
$ list=(${1:[...]}/*(ND:t))
$ (($#list)) && print -rC2 -- ${(V)list}

# Пошук у всіх файлах / home /*/*-mail/ із параметром ``chmod -s''
# (рекурсивний, включає дот-файли) видаліть позначку setgid/setuid і надрукуйте
# повідомлення
$ chmod -s / home /*/*-mail(DN,S) / home /*/*-mail/**/*(DN,S))
# або з невеликим скриптом
$ за файл (/ home /*/*-mail(DN,S) / home /*/*-mail/**/*(DN,S)) {
> print -r -- $file
> chmod -s $file && print -r fixed $file
> }
# або скористайтеся ``zargs'' (потрібне автозавантаження zargs), щоб також запобігти списку аргументів
# довга помилка
$ заргс / home /*/*-mail(DN,S) / home /*/*-mail/**/*(DNs,S)) -- chmod -s

# Список файлів, починаючи з `foo23' і вище (foo23, foo24, foo25, ..)
$ ls -l foo<23->

# отримати всі файли, які починаються з рядків дати з 4 червня по
# 9 червня 2004 року
$ ls -l 200406{04..10}*(N)
# або якщо вони мають форму 200406XX (потрібно ``setopt extended_glob''
$ ls -l 200306<4-10>.*

# видалити пробіли з імен файлів
$ для in ./**/*\ *(Dod); do 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;повторити 8 \
> {читати -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, які старші 30 секунд
$ rm -f /Dir/**/*(ms+30^/)
# видаляє всі папки, підпапки та файли старші однієї години
$ rm ./**/*(.Dmh+1,.DL0)
# видаляє всі файли старше 6 годин
$ rm -f **/*(mh+6)
# видаляє всі файли, крім десяти новіших (видалити всі, крім останніх 10
# файлів у каталозі)
$ rm ./*(Om[1,-11])
Примітка. Якщо ви отримуєте надто довгий список аргументів, використовуйте вбудований rm. для
приклад:
$ zmodload zsh/файли ; rm -f **/*(mh+6)
або скористайтеся функцією zargs:
$ автозавантаження zargs ; zargs **/*(mh+6) -- rm -f

# Посібник користувача для Z-Shell /5.9: Генерація імені файлу та шаблон
# Відповідність пошуку всіх файлів у всіх підкаталогах, рекурсивний пошук,
# які мають задане ім’я, нечутливе до регістру, мають розмір принаймні 50 КБ,
# не старше тижня і належить користувачеві root, і дозволяє
# до однієї помилки в написанні імені. По суті, необхідне
# вираз виглядає так:
$ 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 -- /шлях/до/каталогу/**/*(D.om[5,10])

# Знайти всі файли без дійсного власника.
$ chmod someuser /**/*(D^u:${(j.:u:.)${(f)"$(/ etc / passwd)"}%%:*}:)

# Знайти всі порожні каталоги в дереві.
$ для f у ***/*(/l2); do foo=($f/*(N)); [[ -z $foo ]] && print $f; зроблено
# Примітка: починаючи з Zsh 4.2.1, кваліфікатор F вказує на непорожній каталог.
# Отже *(F) вказує на всі підкаталоги з записами, *(/^F) означає всі
# підкаталог без записів.
$ls -ld *(/^F)

# Після цього видаліть порожні каталоги.
$ rmdir ./**/*(/od) 2> /dev/null

# Показати лише файли, які належать групі «користувачі».
$ ls -l *(G[користувачі])

Модифікатори використання
Модифікатори — це потужний механізм, який дозволяє змінювати результати, які повертає параметр,
розширення імені файлу та історії. Побачити zshexpn(1) для деталей.

# ПРИМІТКА: потрібна Zsh 4.3.4!
$ автозавантаження -U вік
Сьогодні змінено # файлів
$ print *(e:age сьогодні зараз:)
З 5:XNUMX змінено # файлів
$ друк *(e-age 17:00 зараз-)
# ... з 5 години вчора
$ друк *(e-age вчора,17:00 зараз-)
# ... від минулого Різдва до сьогодні
$ друк *(e-age 2006/12/25 сьогодні-)
# ... позавчора
$ друк *(e-age 1970/01/01 вчора-)
# усі файли, змінені між початком цих дат
$ print *(e:age 2006/10/04 2006/10/09:)
# усі файли, змінені на цю дату
$ print *(e:age 2006/10/04:)
# Час поставки.
$ print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)

# Видаліть кінцевий компонент шляху, залишивши заголовок. Це працює як
# `назва каталогу'.
$ echo =ls(:h)
/ bin

# Видаліть усі початкові компоненти шляху, залишивши хвіст. Це працює
# як `базова назва'.
$ echo =ls(:t)
ls

# Видаліть суфікс з кожного файлу (*.sh у цьому прикладі)
$f:e — це розширення файлу $f
:h --> голова (dirname)
:t --> хвіст (базова назва)
:r --> rest (розширення видалено)
$ для f (*.sh) mv $f $f:r

# Видаліть розширення назви файлу у формі `.xxx', залишивши кореневу назву.
$ echo $PWD
/usr/src/linux
$ echo $PWD:t
Linux

# Видалити все, крім розширення.
$ foo=23.42
$ echo $foo
23.42
$ echo $foo:e
42

# Надрукуйте нову команду, але не виконуйте її. Працює лише з історією
# розширення.
$ echo =ls(:h)
/ bin
$ !echo:p
$ echo =ls(:h)

# Введіть замінені слова в лапки, уникаючи подальших замін.
$ bar="23'42"
$ echo $ bar
23'42
$ echo $bar:q
23 \ '42

# Перетворіть слова на малі літери.
$ bar=FOOBAR
$ echo $ bar
ФООБАР
$ echo $bar:l
foobar

# Перетворіть слова на великі літери.
$ bar=foobar
$ echo $ bar
foobar
$ echo $bar:u
ФООБАР

# перетворити 1-й символ слова у верхній регістр
$ foo="один два три чотири"
$ print -r -- "${(C)foo}"
Один два три чотири

Перенаправлення – приклади
Читати zshmisc(1) для отримання додаткової інформації (або менше ${^fpath}/zmv(N))

# Додайте `exit 1' в кінці всіх файлів *.sh
$ echo "вихід 1" >> *.sh

# додавання файлів до foobar.tar.gz
$ eval set =(gunzip < foobar.tar.gz) '
tar rf $1 Additional.txt &&gzip < $1 > foobar.tar.gz'

# Перенаправлення виводу у файл І відображення на екрані
$ foobar >&1 > файл1 > файл2 > ..

# конвеєр один вихід до кількох входів
$ zcat foobar.Z >> (gzip -9 > файл1.gz) \
>> (bzip2 -9 > файл1.bz2) \
>> (acb --best > file1.acb)

# Додати / etc / services в кінці файлу `foo' і `bar'
$ кіт / etc / services >> foo >> бар

# Труба STDERR
$ echo Помилка >&2 2>&1 | sed -e 's/A/I/'

# надсилати стандартний вихід одного процесу на стандартний вхід кількох процесів
# в конвеєрі
$ setopt multios
$ процес1 > >(процес1) > >(процес2)

# ініціалізація змінної та одночасне збереження виводу терміналу
$ setopt multios
$ { a=$(команда >&1 >& 3 3 > &- 2>&1);} 3>&1

# двічі перенаправити stderr
$ setopt multios ; програма 2> файл2 > файл1 2>&1

# Дублювання stdout і stderr у файл журналу
$ 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
# І stderr до вихідного. stderr:
$ команда 2>&2 1>&1 2>stderr 1>stdout

# Більше задоволення від STDERR ;)
$ ./my-script.sh 2> >(grep -v moron >error.log)|process-output >output.log
$ echo "Це STDOUT" >>(sed 's/stdout/інший приклад/' > foobar)

ЗМВ-Приклади (вимагають автозавантаження zmv)
Примітка: -n означає відсутність виконання (просто виведіть те, що станеться). на

# Видаліть недозволені символи у файловій системі fat32. Недопустимі символи є
# / : ; * ? " < > |
# ПРИМІТКА: ``-Q'' і (D) включають приховані файли.
$ unwanted='[:;*?\"<>|]'
$ zmv -Q "(**/)(*$~небажаний*)(D)" '$1${2//$~небажаний/}'

# Зміна частини назви файлу (тобто "file-hell.name" -> "file-heaven.name")
$ zmv '(*)пекло(*)' '${1}рай${2}'
# або
$ zmv '*' '$f:s/hell/heaven/'

# видалити круглі дужки в назвах файлів
# тобто 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" НЕ є помилкою в написанні!

# Перейменувати назви всіх файлів у поточному каталогі на нижній регістр, але зберегти
# dirname як є.
$ zmv -Qv '(**/)(*)(.D)' '$1${(L)2}'

# замінити всі 4-ті символи, які є "1", на "2" і так далі
$ автозавантаження -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
> файл=$1
> dir=${file%/*}
> name=${file##*/}
> newname=${name//*([ -]) *([ -])/-}
> mv -i -- "$file" "$Dir/$newname"' {} {} \;

# Очистіть імена файлів і видаліть спеціальні символи
$ автозавантаження zmv
$ zmv -n '(**/)(*)' '$1${2//[^A-Za-z0-9._]/_}'

# Додайте *.py до групи сценаріїв python у каталозі (деякі з них закінчуються
# у *.py та надайте всім їм належне розширення
$ автозавантаження zmv
$ zmv -n '(**/)(con*)(#qe,файл $REPLY | grep "скрипт python",)' '$1$2.py'

# нижній регістр усі розширення (тобто *.JPG) вкл. підпапки
$ автозавантаження zmv
$ zmv '(**/)(*).(#i)jpg' '$1$2.jpg'
# Або - без Зш
$ find Dir -name '*.[jJ][pP][gG]' -print | під час читання f
> робити
> регістр $f в
> *.jpg);
> *) mv "$f" "${f%.*}.jpg" loading="lazy" ;
> esac
> зроблено

# видалити початкові нулі з розширення файлу
$ автозавантаження zmv
$ls
ім'я файлу.001 ім'я файлу.003 ім'я файлу.005 ім'я файла.007 ім'я файла.009
ім'я файлу.002 ім'я файлу.004 ім'я файлу.006 ім'я файла.008 ім'я файла.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'' також перейменовує приховані файли (дот-файли))
$ автозавантаження zmv
$ zmv -Q '/ home /**/*(D-.)' '$f.txt'
# Або перейменувати лише файли, які не мають розширення:
$ zmv -Q '/ home /**/^?*.*(D-.)' '$f.txt'

# Рекурсивно змінювати назви файлів символами? [ ] / = + < > ; : " , - *
$ автозавантаження zmv
$ chars='[][?=+<>;",*-]'
$ zmv '(**/)(*)' '$1${2//$~символів/%}'

# Видалення одинарних лапок з імен файлів (рекурсивно)
$ автозавантаження zmv
$ zmv -Q "(**/)(*'*)(D)" "\$1\${2//'/}"

# Коли надходить новий файл (з назвою file.txt), перейменуйте всі файли, щоб
# отримати (наприклад, file119.txt стає file120.txt, file118.txt стає
# файл119.txt і так далі, закінчуючи файлом файл.txt, який стає файлом1.txt
$ автозавантаження zmv
$ zmv -fQ 'file([0-9]##).txt(On)' '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/клон (вимагають zmodload zsh/клон)
# Створює розгалужений екземпляр поточної оболонки ($! має значення нуль) і
# виконати ``команду'' на /dev/tty8 (для цього прикладу).
$ zmodload zsh/клон
$ clone /dev/tty8 && (($! == 0)) && команда exec

zsh/datetime (вимагають zmodload zsh/datetime)
$ zmodload zsh/datetime
$ псевдонім datereplacement='strftime "%Y-%m-%d" $EPOCHSECONDS'
$export DATE=`datereplacement`
$ echo $DATE

# видалити дату з імені файлу
$ $ zmodload zsh/datetime
$ setopt extendedglob
$ touch aaa_bbb_20041212_c.dat eee_fff_20051019_g.dat
$ strftime -s шаблон \
'???_???_<0-%Y%m%d>_?.dat' $((ЕПОХСЕКУНД - 365 * 24 * 60 * 60 / 2))
$ print -rl -- $~шаблон
aaa_bbb_20041212_c.dat
$ print -rl -- $шаблон
???_???_<0-20050815>_?.dat

# Пошук розміру файлів == 0, щоб базуватися на імені файлу, що містить дату
# замість дати "останньої зміни" файлу
$ zmodload -i zsh/datetime
$ strftime -s файл "abc_de_%m%d%Y.dat" $((ЕПОХСЕКУНД - 24 * 60 * 60 ))
$ файлів=(**/$файл(N.L0))
$ (( $#files > 0 )) && print -rl -- $files | \
mailx -s "порожні файли" [захищено електронною поштою]

zsh/стат (вимагають zmodload zsh/stat)
# перевірити, чи символічне посилання посилається на певний файл
$ zmodload -i zsh/stat
$ ! stat -LH s foo.ln || [[ $s[посилання] != "foo.exe" ]] || ln -sf foo.exe foo.ln

# порівняння дат файлів
$ zmodload zsh/stat
$ file1=foo
$ file2=bar
$ touch bar & sleep 5 & touch foo
$echo $file1 це $(($(stat +mtime $file2) - \
$(stat +mtime $file1))) секунд старший за $file2.
bar на 5 секунд старший за foo

# перерахувати файли на диску, менші за розмір інших файлів
$ zmodload zsh/stat
$ stat -A max +size some-other-file
$ 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 + розмір ~ / .zshrc
4707

# Видалити файли в каталозі, до яких не було доступу протягом останніх десяти днів
# і надішліть ОДНЕ повідомлення власнику файлів, повідомляючи його/її про файли
# видалення.
$ zmodload zsh/stat zsh/файли
$ набір -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
$ за d (. ./**/*(Н/м-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]}
> cd ~-
> }

# отримати дату створення файлу
$ 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/файли
$ IFS=$'\0'
$ cp $(grep -lZr foobar .) інший каталог

zsh/mapfile (вимагають zmodload zsh/mapfile)
# grepping для двох шаблонів
$ zmodload zsh/mapfile
$ pattern1="foo"
$ pattern2="bar foo"
$ print -l ./**/*(DN.e{'z=$mapfile[$REPLY] && [[ $z = *$pattern1* && \
$z = *$шаблон2* ]]'})
# або рішення в поєднанні з 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]'})

# еквівалент для ``менше / etc / passwd | grep -v root''
$ zmodload zsh/mapfile
$ IFS=$'\n\n'
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*корінь*}
# або - для врахування регістру
$ setopt extendedglob
$ print -rl -- ${${=mapfile[/ etc / passwd]}:#*(#i)корінь*}

# Якщо XML-файл містить такі речі, як `` '' і `` '', число
# це порожні теги (які закінчуються на '/>'), тож, якщо вони зустрічаються в них
# порядок, попередні теги стануть `` 1 '' і
# `` 2 ''
$ zmodload zsh/mapfile
$ cnt=0
$ apfile[data.xml.new]=${(S)mapfile[data.xml]//\
> (#ім) *<\/TAGA>/ $((++cnt))<\/TAGA>}

# видалення всіх файлів у користувачах Maildir/new, які містять ``filename="gone.src''
$ zmodload zsh/{files,mapfile}
$ rm -f /u1/??/*/Maildir/new/100*(.e{'[[ $mapfile[$REPLY] == \
*filename=\"gone.scr\"* ]]'})

# Отримайте заголовок із файлу postscript і додайте це значення до
# кінець імені файлу
$ автозавантаження -U zmv
$ zmodload zsh/mapfile
$ zmv '(*).ps' '$1-${${${mapfile[$f]##*%%Назва: }%% *}//[^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
$ print $((1e12 * rand48()))
847909677310.23413
$ print $(( 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 ; ehotc AF 1`
$ print -l ${GREEN}green ${YELLOW}yellow ${RED}red ${BRIGHTRED}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/socket (вимагають 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)
$ автозавантаження -U zfinit
$ zfinit
$ zfparams www.example.invalid myuserid mypassword
$ zfopen
$ zfcd поради
$ zfls -l zshtips.html
$ zfput zshtips.html
$ zfls -l zshtips.html

# Автоматична передача файлів за допомогою FTP із перевіркою помилок
$ автозавантаження -U zfinit ; zfinit
$ zftp open host.name.invalid user passwd || вихід
$ zftp get /remote/file > /local/file; r=$?
$ zftp закрити && вийти r

# стиснення та ftp на льоту
$ автозавантаження -U zfinit ; zfinit
$ zftp open host.name.invalid user password
$ zftp отримати $ файл | bzip2 > ${файл}.bz2
$ zftp закрити

# Рекурсія ``отримати''
$ автозавантаження -U zfinit ; zfinit
$ zfanon cr.yp.to
$ zfcd daemontools
$ для файлу в `zfls` ; робити
> zfget $file
$ зроблено
$ zfclose

# Завантажте всі звичайні файли в $HOME/foobar (рекурсивні), новіші за
# дві години до ftp.foobar.invalid/path/to/upload
$ автозавантаження -U zfinit ; zfinit
$ zfopen ftp.foobar.invalid/path/to/upload
$ cd $HOME/foobar
$ zfput -r **/*(.mh-2)
$ zfclose

# довгий список файлів на ftp
$ автозавантаження -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 min 0 раз 50
| $ читати так
| $ stty "$sg"
| $ case "$yesno" в
| > так) команда1;;
| > *) command2;;
| > esac
`----
$ zmodload zsh/zselect
$ if zselect -t 500 -r 0 && читати yesno && [ yes = "$yesno" ]; потім
> команда1
> інше
> команда1
> fi

ВАРІАНТИ


навігація опції
auto_cd (дозволити перейти до каталогу, ввівши його як команду). auto_pushd
(автоматично додавати каталоги до списку push/pop) pushd_ignore_dups (і не дублювати
їх).

Різне
no_hup (не надсилайте сигнал HUP фоновим завданням під час виходу з ZSH). print_exit_value (показати
повідомлення з кодом виходу, коли команда повертається з ненульовим кодом виходу)

Історія опції
hist_verify (дозвольте користувачеві редагувати командний рядок після розширення історії (наприклад, !ls)
замість негайного запуску) Використовуйте той самий файл історії для всіх сеансів: сетопт
SHARE_HISTORY

Конфіденційність / Безпека
no_clobber (або встановити -C; запобігти > переспрямування від скорочення даного файлу, якщо він
вже існує)

Орфографія корекція
виправити (автоматично виправляти написання команд). правильно_все (автоматично
виправте написання кожного слова в командному рядку) дворак (дворак макет)

НЕВОРТУВАНЕ/РІЗНЕ


Mailpath: простий множинний mailpath:

mailpath=($HOME/Mail/mbox'?нова пошта в mbox'
$HOME/Mail/tux.u-strasbg'?нова пошта в tux'
$HOME/Mail/lilo'?нова пошта в lilo'
$HOME/Mail/ldap-fr'?нова пошта в ldap-fr')

Mailpath: динамічний mailpath:

typeset - шлях пошти
бо я в ~/Пошта/Списки/*(.); робити
mailpath[$#mailpath+1]="${i}? У вас нова пошта в ${i:t}."
зроблений

Уникайте глобулювання спеціальних команд:

для com у псевдонімі expr find mattrib mcopy mdir mdel which;
псевдонім $com="noglob $com"

Для перенесення вашого bashprompt на zsh використовуйте сценарій bash2zshprompt, розташований у zsh
джерело поширення під Різне.

Для міграції з (t)csh на zsh використовуйте інструмент c2z, який перетворює псевдоніми csh і
середовище та змінні оболонки для zsh. Він робить це, запускаючи csh і створюючи звіт csh
на псевдоніми та змінні. Потім сценарій перетворює їх на файли запуску zsh. У ньому є деякі
проблеми та інформація про використання, задокументована у верхній частині цього сценарію.

Ось функції для встановлення назви та жорсткого статусу XTerm або з GNU Екран до zsh та
поточний каталог, відповідно, коли відображається підказка, і ім’я команди
і решта командного рядка, відповідно, коли виконується команда:

назва функції {
if [[ $TERM == "screen" ]]; потім
# Використовуйте ці два для екрану GNU:
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 зш
локальний -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 $ІМ'Я КОРИСТУВАЧА $fignore $mailpath $cdpath

ПОСИЛАННЯ


Основний сайт

http://www.zsh.org/

Сторінка проекту

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

Сторінка оболонки Z на сайті sunsite.dk

http://zsh.sunsite.dk/

Від Bash до Z Shell: підкорення командного рядка - книга

http://www.bash2zsh.com/

"Zsh - die magische Shell" (німецька книга про Zsh) Свена Ґукеса та Юліуса Пленца

http://zshbuch.org/

Архів списку розсилки

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

ZSH-FAQ

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

Керівництво користувача

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

ЗШ-Вікі

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

ЗШ Оперативний вступ

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

Сторінка ЗШ Адама

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

Zzappers Best of ZSH Поради

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

Веб-сторінка Zsh Крістіана Шнайдера

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

Веб-сторінка любителів zsh

http://grml.org/zsh/

IRC канал

#zsh at irc.freenode.org

Довідкова картка оболонки Z (входить до пакета debian zsh-lovers)

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

AUTHORS


Цю довідкову сторінку написав Майкл Прокоп, Крістіан strcat Шнайдер і Матіас
Копферманн. Але багато ідей було взято від zsh-гіків, наприклад, зі списків розсилки zsh
(zsh-users і zsh-workers), google, групи новин і zsh-Wiki. Дякую за вашу крутість і
неймовірні поради. Ми багато чому навчилися у вас!

В алфавітному порядку:

Андрій 'zefram' Головна - 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


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    MSYS2
    MSYS2
    MSYS2 — це набір інструментів і
    бібліотеки, які надають вам
    просте у використанні середовище для будівництва,
    встановлення та запуск рідної Windows
    програмне забезпечення. Це кон...
    Завантажити MSYS2
  • 2
    libjpeg-турбо
    libjpeg-турбо
    libjpeg-turbo — це кодек зображень JPEG
    який використовує SIMD-інструкції (MMX, SSE2,
    NEON, AltiVec) для прискорення базового рівня
    Стиснення та декомпресія JPEG увімкнено
    х86, х8...
    Завантажте libjpeg-turbo
  • 3
    Менеджер завантажень Xtreme
    Менеджер завантажень Xtreme
    Зараз проект має новий будинок:
    https://xtremedownloadmanager.com/ For
    розробники:
    https://github.com/subhra74/xdm Xtreme
    Менеджер завантажень - це потужний інструмент для...
    Завантажте Xtreme Download Manager
  • 4
    TTGO VGA32 Lite
    TTGO VGA32 Lite
    Характеристики: низька роздільна здатність 4:3 і 16:9
    Вихід VGA PS/2 для клавіатури та миші
    інтерфейс користувача на основі inputText (TUI)
    з диспетчером діалогів Частковий Unicode
    підтримкаSlave dis...
    Завантажте TTGO VGA32 Lite
  • 5
    Clover EFI завантажувач
    Clover EFI завантажувач
    Проект переміщено в
    https://github.com/CloverHackyColor/CloverBootloader..
    Особливості: завантажуйте macOS, Windows і Linux
    в UEFI або застарілому режимі на Mac або ПК з
    ЄС...
    Завантажте завантажувач Clover EFI
  • 6
    unitedrpms
    unitedrpms
    Приєднуйтесь до нас у Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    Увімкніть репозиторій URPMS у вашому
    система -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    Завантажити unitedrpms
  • Детальніше »

Команди Linux

Ad