これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド zsh-lovers です。
プログラム:
NAME
zsh-lovers - Z シェルのヒント、トリック、および例
SYNOPSIS
ただ読んでください。 ;-)
概要
zsh マニュアルを見るたびに、なぜ例がないのか、単に例がないのか疑問に思います
(シェル) 生活の中にあるもの。 zshには多くの機能が含まれていますが、いくつかのマンページはありませんでした
例(のような プロメールレックス(5))。 それが、このマンページを書いた理由です。
トリックとワンライナーのほとんどは、メーリングリスト zsh-users、zsh-workers、google、
ニュースグループと私たち自身から。 セクションを参照 LINKS より詳細をご確認いただけます。
注: このマンページ (zsh愛好家(1))は Zシェルの公式パーツ! ただの正義です
楽しみのために - manpage ;) コメント、バグレポート、およびフィードバックについては、
バグ.
シェルスクリプト
このセクションでは、よく必要とされるシェルスクリプトの例をいくつか示します。 あなたが
そうしないと、ほとんどの例が機能しません。 シェルスクリプトの解析オプション。 例
Adam Chodorowski が 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 PORT] [-r DIRECTORY]"
1番出口
fi
ポート=$o_port[2]
ルート=$o_root[2]
log=$o_log[2]
if [[ $root[1] != '/' ]]; 次に root="$PWD/$root"; フィ
}
# 関数を使用する:
parse_options $*
例
利用可能なサブセクションは エイリアス, 完成, 未分類/その他 例, (再帰)
グロビング - 例, 修飾子 使用, リダイレクトの例, ZMV-例
モジュールの例.
エイリアス
バージョン 4.2.0 以降、サフィックス エイリアスは zsh でサポートされています。 いくつかの例:
エイリアス -s tex=vim
エイリアス -s html=w3m
エイリアス -s org=w3m
入力後にリターンキーを押すようになりました foobar.tex foobar.tex で vim を起動します。 を呼び出す
html-file はブラウザ w3m を実行します。 www.zsh.org Enter キーを押すと、w3m が引数付きで起動します
www.zsh.org。 グローバル エイリアスは、コマンド ラインのどこでも使用できます。 例:
$ エイリアス -g C='| wc -l'
$ grep エイリアス ~/.zsh/*C
443
多かれ少なかれ有用なグローバル エイリアス (それらが有用かどうかを選択してください。
あなた自身の):
エイリアス -g ...='../ ..'
エイリアス -g ....='../../.。'
エイリアス -g .....='../../../.。'
エイリアス -g CA="2>&1 | 猫 -A"
エイリアス -g C='| wc -l'
エイリアス -g D="DISPLAY=:0.0"
エイリアス -g DN=/dev/null
エイリアス -g ED="export DISPLAY=:0.0"
エイリアス -g EG='|& egrep'
エイリアス -g EH='|& head'
エイリアス -g EL='|& less'
エイリアス -g ELS='|& less -S'
エイリアス -g ETL='|& テール -20'
エイリアス -g ET='|& テール'
エイリアス -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' 無視されたパターン '(|*/)CVS'
zstyle ':completion:*:cd:*' 無視されたパターン '(*/)#CVS'
入力ミスした場合の補完のあいまい一致:
zstyle ':completion:*' コンプリータ _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' 無視されたパターン '_*'
次のようなヘルパー関数を使用します。
xdvi() { コマンド xdvi ${*:-*.dvi(om[1])} }
多くの場合、完了する必要はまったくありませんが、完了する場合は、
すぐにメニュー選択に入り、単語を時間順に並べ替えるには:
zstyle ':completion:*:*:xdvi:*' メニュー はい 選択
zstyle ':completion:*:*:xdvi:*' ファイルソート時間
メニュー選択によるプロセス ID の完成:
zstyle ':completion:*:*:kill:*' メニュー はい 選択
zstyle ':completion:*:kill:*' force-list 常に
ディレクトリを引数として使用することになった場合、これにより末尾のスラッシュが削除されます (便利な
で)
zstyle ':completion:*' スクイーズスラッシュ true
cd は親ディレクトリを選択しません (例: cd ../ ):
zstyle ':completion:*:cd:*' ignore-parents 親 pwd
のための別の方法 クイック 変化する ディレクトリ。 これをあなたに追加してください 〜/ .zshrc、次に入力するだけです
「cd ..../dir」
合理化ドット() {
if [[ $LBUFFER = *.. ]]; それから
Lバッファ+=/ ..
ほかに
LBUFFER+=。
fi
}
zle -N 合理化ドット
バインドキー . 合理化ドット
未分類/その他 例
ヒント: 有効な glob 修飾子のリストは、 zshexpn(1)。 「man 1 zshexpn |」を参照してください。
less -p」詳細については修飾子を参照してください。
# 上のパターン *どこでも* 一致しない * すべてのファイルの名前を取得します。
# ファイル (GNU っぽいので ``-L'' なし)
$ print -rl -- *(.^e{'grep -q pattern $REPLY'})
#または
$ : *(.e{'grep -q pattern $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
$ for file (*(ND-.)) IFS= read -re < $file
# パラメータが数値かテスト
$ if [[ $1 == <-> ]] ; それから
数値をエコー
ほかに
非数値をエコー
fi
# .o ファイルが存在しないすべての .c ファイルを表示します。
$ print *.c(e_'[[ ! -e $REPLY:ro ]]'_)
# すべてのファイル / var / root が所有していない
$ ls -ld / var /*(^u:ルート)
# 所有者が読み取り権限と実行権限を持っているすべてのファイル
$ エコー *(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 )
> if [ -n "$files" ]; それから
> IFS='
> '
> セット -f
> file=$(ls -td $files | head -1)
> grep -l ORA- "$file"
> ファイ
# タスク全体が完了するまで、指定された数の子プロセスを実行し続ける
$ zsh -c 'スリープ 1 & スリープ 3 & スリープ 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 string file*)'
$ for f (file*(N)) grep -q string $f || print -r $f'
# オプションが設定されているかどうかを表示/確認します。 $options の両方で機能します
# $builtins で
$ echo $options[正しい]
OFF
$ $オプション[zle]
on
# スタック上のディレクトリ数を数える
$ print $(((${${(z)${(f)"$(dirs -v)"}[-1]}[1]} + 1)) # または
$ ディレクトリ -v | awk '{n=$1}END{print n+1}'
# ファイル名にドットを含まないすべてのファイルに一致
$ ls *~*.*(.)
# ``ifconfig device'' からの IP アドレスのみを表示
# net-tools からの ifconfig (Linux)
$ print ${${$(LC_ALL=C / sbin / ifconfig eth0)[7]}:gs/addr://}
# 4.2BSD {Free,Net,Open}BSD からの ifconfig
$ 印刷 ${$(/ sbin / ifconfig tun0)[6]}
# いくつかのクラス C またはすべてのホストのすべての IP アドレスに ping を実行します
# の中へ /etc/hosts
$ for i in {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
$ for i in $(sed 's/#.*//' > /etc/hosts | | awk '{print $2}')
: 行う
: echo "$i を試しています ..."
: ping -c 1 $i ;
: エコー '============================'
: 終わり
# 起動時に利用可能なすべてのモジュールをロード
$ typeset -U m
$m=()
$ for md ($module_path) m=($m $md/**/*(*e:'REPLY=${REPLY#$md/}'::r))
$ zmodload -i $m
# ディレクトリ内のすべてのファイルの名前が数字になるように変更します
# デフォルトのソート順の接頭辞。
$ i=1; j in *; do mv $j $i.$j; ((i++)); 終わり
$ i=1; *のfの場合; do mv $f $(echo $i | \
awk '{ printf("%03d", $0)}').$f; ((i++)); 終わり
$ 整数 i=0; *のfの場合; do mv $f $[i+=1].$f; 終わり
# 現在のファイル内でターゲットのないすべてのシンボリック リンクを検索 (および出力)
#ダートツリー。
$ $ ファイル **/*(D@) | fgrepが壊れた
$ for i in **/*(D@); [[ -f $i || -d $i ]] || エコー $i
$ echo **/*(@-^./=%p)
$ print -l **/*(-@)
# `fignore' にリストされている拡張子を持たないすべてのプレーン ファイルをリストします
$ ls **/*~*(${~${(j/|/)fignore}})(.)
# 上記を参照。ただし、実行可能ファイルは省略
$ ls **/*~*(${~${(j/|/)fignore}})(.^*)
# 拡張子のないファイルを出力します (*setopt extendedglob* が必要です)
# および *setopt ドットグロブ*)
$ printf '%s\n' ^?*.*
# ファイルを名前順に逆順に並べて表示
$ print -rl -- *(オン)
or
$ print -rl -- *(^on)
# ``ps ax | と同義です。 awk '{print $1}'''
$ 印刷 -l / proc /*/cwd(:h:t:s/self//)
# プロセスの PID を取得します (「ps」、「sed」、「pgrep」、..
# (Linux の場合)
$ pid2() {
> ローカル私
> for i in / proc /<->/統計
>します
> [[ "$(< $i)" = *\((${(j:|:)~@})\)* ]] && echo $i:h:t
> できました
>}
# for X in 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y'; 行う ...
$ for (( i = 36#n; i <= 36#y; i++ )); 行う
> print ${$(([##36]i)):l}
> できました
# または「dc」と組み合わせて
$ print {$((##n))..$((##y))}P\ 10P | 直流
# または「eval」を使用
$ eval print '${$(([##36]'{$((36#n))..$((36#y))}')):l}'
# シェルの一行で foreach
$ for 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} > $nameofffile # 保存
$ eval "m=($(cat -- $nameoffile)" # または使用
$ m=("${(@Q)${(z)"$(cat -- $nameoffile)"}}") # 復元する
# ツリー内のすべてのファイルで "ls -l" を取得します。
# 指定された年齢 (例: "ls -l" はツリー内のすべてのファイル
# 過去 2 日間に変更されました)
$ ls -tld **/*(m-2)
# これにより、1 ファイルの perl 行が表示されます (la ls -R ではありません)。
# "ls -R" スタイルの出力を行う簡単な方法を考えてください
# 2 日より新しいファイルのみ。
$ for d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Nm-2))
> (($#l)) && ls -ltd -- $l
> CD ~-
>}
>}
# mtime であってもディレクトリを含めたい場合
# は 2 日以上経過しています:
$ for d (. ./**/*(/)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(N/,m-2))
> (($#l)) && ls -ltd -- $l
> CD ~-
>}
>}
# そして、mtime が 2 日未満のディレクトリのみを一覧表示する場合:
$ for d (. ./**/*(N/m-2)) {
> print -r -- $'\n'${d}:
> cd $d && {
> l=(*(Nm-2))
> (($#l)) && ls -ltd -- $l
> CD ~-
>}
>}
# print 42 ``-''
$ echo ${(l:42::-:)}
# または「$COLUMS」を使用
$ echo ${(l:$COLUMNS::-:)}
# そして今は色付き (required autoload colors ;colors)
$ echo "$bg[red]$fg[black]${(l:42::-:)}"
# STDOUT もリダイレクトせずに、STDERR を xless などのコマンドにリダイレクトします。
$ foo 2>>(xless)
# しかし、これはコマンドを非同期で実行します。 同期的に行うには:
$ { { フー 1>&3 } 2>&1 | xless } 3>&1
# すべての MP3 ファイルの名前を、スペースを含む名前.mp3 からスペースを含む名前.mp3 に変更します。
$ for i in *.mp3; 行う
> mv $i ${${(C)i}:s/Mp3/mp3/}
> できました
# 数字のみを含み、.xml で終わるファイル名に一致します (required
# *setopt kshglob*)
$ ls -l [0-9]##.xml
$ ls -l <0->.xml
# 「txt 以外」のファイルをすべて削除する
$ rm ./^*.txt
# あるディレクトリから別のディレクトリに 200 個のファイルを移動する
$ mv -- *([1,200]) /別の/Dir
# 画像を変換 (foo.gif => foo.png):
$ for i in **/*.gif; $i $i:r.png を変換します
# mp3 ファイルのコレクションを wave または cdr に変換します。
# 例 file.wav -> file.mp3)
$ for i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}
# LaTeX2HTML で作成されたファイル (ZSH-Guide など) をダウンロード:
$ for f in http://zsh.sunsite.dk/Guide/zshguide{,{01..08}}.html; 行う
> オオヤマネコ -source $f >${f:t}
> できました
# dir1 と dir2 内の行数が 10 を超えるすべてのファイルを
# 別のディレクトリ say "/more10"
$ mv dir[12]/**/*.cr(-.e{'((`wc -l < $REPLY` > 10))'}) /more10
# dpkg を使用して、インストールしたすべてのファイルのマスター リストを作成します
$ diff <(検索 / | 並べ替え) <(猫 / var / lib / dpkg / info /*.list | 選別)
# このクソエスケープシーケンスを置き換えます:
$ autoload 色; 色
$ print "$bg[cyan]$fg[blue]お前は馬鹿だ" >> /dev/pts/3
# 文字の ASCII 値を取得
$ char=N ; 印刷 $((#char))
# ファイル名 "Erweiterung"
# 注: (N) は、この特定の場合に nullglob オプションを使用することを示しています
# グロブ パターン。
$ for i in *.o(N); 行う
> rm $i
> できました
# ファイルの名前を変更します。 つまり、FOO から foo へ、bar から BAR へ
$ for i in *(.); mv $i ${i:l} # `FOO' から `foo'
$ for i in *(.); mv $i ${i:u} # `bar to `BAR'
# $PATH 内のすべての suid ファイルを表示
$ ls -latg ${(s.:.)PATH} | grep '^...s'
# 以上複雑 ;)
$ print -l ${^パス}/*(Ns,S)
# または、ユーザーが指定したパターンを持つ実行可能ファイルのみを表示
$ print -l ${^path}/*vim*(*N)
# 特定の文字列を含む場合の gzip ファイル
$ gzip ${(ps:\0:)"$(grep -lZ foobar ./*.txt(.))"}
# 標準入力から読み取り、最初に標準出力に出力する小さなワンライナー
# 一意の行、つまり、以前に印刷された行は印刷されません
# (これは unique コマンドに似ていますが、unique コマンドで処理できるのは
# 隣接する行)。
$ IFS=$'\n\n'; print -rl -- ${(Oau)${(Oa)$(cat file;echo .)[1,-2]}}
# PATH 内のすべての実行可能ファイルを一覧表示します
$ print -l ${^パス}/*(-*N)
# すべてのサブディレクトリ内のすべての .c ファイルに一致しますが、SCCS サブディレクトリは_除く_?
$ ls **/*.c~(*/)#SCCS/*
# すべての `README' を一覧表示 - ファイルの大文字と小文字は区別されません。 XNUMXつのタイプミス
$ ls **/*(#ia2)readme
# 大文字と小文字を区別しない変数のチェック
$ if [[ $OSTYPE == (#i)LINUX*(#I) ]]; それから
> echo "ペンギンが乗っています。"
> そうでなければ
> echo "Linux ではありません"。
> ファイ
(再帰) グロビング - 例
有効な glob 修飾子のリストは、次の場所にあります。 zshexpnとします。 注意: **/ と同等
(*/)#! 例えば:
$ 印刷 (*/)#zsh_us.ps
zsh-4.2.3/ドキュメント/zsh_us.ps
$ print **/zsh_us.ps
zsh-4.2.3/ドキュメント/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 ))':)
# ベース名の代わりにディレクトリ名を検索する Find コマンド
$ print -rl /**/*~^*/パス(|/*)
# または - Zsh なし
$ 検索 / | grep -e /パス/ -e '/パス$'
# 最大 XNUMX 個の C 通常ファイルを保持するディレクトリのパスを出力します
# 現在のディレクトリとサブディレクトリに。
$ print -rl -- **/*.c(D.OL[1,10]:h) | 並べ替え -u
# サイズ == 0 のファイルを見つけてメールを送信
$ files=(**/*(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 /``chmod -s'' フラグを設定した */*-mail/
# (再帰的、ドットファイルを含む) setgid/setuid フラグを削除して出力
# メッセージ
$ chmod -s / home /*/*-mail(DN,S) / home /*/*-mail/**/*(DN,S))
# または小さなスクリプトで
$ ファイル (/ home /*/*-mail(DN,S) / home /*/*-mail/**/*(DN,S)) {
> print -r -- $ファイル
> chmod -s $file && print -r fixed $file
>}
# または ``zargs'' を使用 (自動ロード zargs が必要) も引数リストを防止します
# 長いエラー
$ ザーグス / home /*/*-mail(DN,S) / home /*/*-mail/**/*(DN,S)) -- chmod -s
# `foo23' で始まるファイルを上にリストします (foo23、foo24、foo25、..)
$ ls -l foo<23->
# 4 月 XNUMX 日から XNUMX 月 XNUMX 日までの日付文字列で始まるすべてのファイルを取得します
# 9 年 2004 月 XNUMX 日
$ ls -l 200406{04..10}*(N)
# またはそれらが 200406XX の形式である場合 (``setopt extended_glob'' が必要)
$ ls -l 200306<4-10>.*
# ファイル名からスペースを削除
$ for a 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;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 内の 30 秒より古いすべての非ディレクトリを削除します
$ rm -f /Dir/**/*(ms+30^/)
# XNUMX 時間以上経過したすべてのフォルダー、サブフォルダー、およびファイルを削除します
$ rm ./**/*(.Dmh+1,.DL0)
# 6 時間以上経過したすべてのファイルを削除します
$ rm -f **/*(mh+6)
# 10 個の新しいファイルを除くすべてのファイルを削除します (最後の XNUMX 個を除くすべてのファイルを削除します)
# ディレクトリ内のファイル)
$ rm ./*(Om[1,-11])
注: 引数リストが長すぎる場合は、組み込みの rm を使用します。 為に
例:
$ zmodload zsh/ファイル ; rm -f **/*(mh+6)
または zargs 関数を使用します。
$ autoload zargs ; zargs **/*(mh+6) -- rm -f
# Z-Shell /5.9 のユーザー ガイド: ファイル名の生成とパターン
# マッチングはすべてのサブディレクトリ内のすべてのファイルを検索し、再帰的に検索します。
# 与えられた名前を持ち、大文字と小文字を区別せず、少なくとも 50 KB の大きさであり、
# 作成から XNUMX 週間以内で、root ユーザーが所有し、
# 名前のスペルの XNUMX つのエラーに。 実際、必要な
# 式は次のようになります。
$ ls **/(#ia1)名前(LK+50mw-1u0)
# UID を 102 から 666 に変更
$ chown 666 **/*(u102)
# 過去 10 時間以降に更新されていないすべてのファイルを一覧表示する
$ print -rl -- *(Dmh+10^/)
# ディレクトリ内の最も古いファイルのみを削除
$ rm ./*ファイル名*(Om[1])
# `ls -l' の出力をファイルサイズでソート
$ ls -fld *(OL)
# ディレクトリ内の最新のファイルを検索
$ setopt ドットグロブ; print directory/**/*(om[1])
# `group' または `world writable' でない空のファイルのみを表示します
$ ls *(L0f.go-w.)
# ディレクトリとサブディレクトリ内の最新の XNUMX 個のファイルを検索して一覧表示します。
# (再帰)
$ print -rl -- **/*(Dom[1,10])
# "ls" コマンド ("ls -laS | head -n 5" など) で 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)"}%%:*}:)
# ツリー内の空のディレクトリをすべて見つけます。
$ for f in ***/*(/l2); do foo=($f/*(N)); [[ -z $foo ]] && print $f; 終わり
# 注:Zsh 4.2.1 以降、glob 修飾子 F は空でないディレクトリを示します。
# したがって、*(F) はエントリを持つすべてのサブディレクトリを示し、*(/^F) はすべてを意味します
# エントリのないサブディレクトリ。
$ ls -ld *(/^F)
# その後、空のディレクトリを削除します。
$ rmdir ./**/*(/od) 2> /dev/null
# グループ「users」が所有するファイルのみを表示します。
$ ls -l *(G[ユーザー])
修飾子 使用
修飾子は、パラメーターによって返される結果を変更できる強力なメカニズムです。
ファイル名と履歴の展開。 見る zshexpn詳細は(1)。
# 注: Zsh 4.3.4 が必要です!
$ autoload -U 年齢
# 個のファイルが今日変更されました
$ print *(e:今日の年齢:)
午後 5 時以降に # 個のファイルが変更されました
$ print *(e-age 17:00現在~)
# ... 昨日の5時から
$ print *(e-age 昨日,17:00 now-)
# ... 去年のクリスマスから今日まで
$ print *(e-age 2006/12/25 本日~)
# ... 昨日まで
$ print *(e-age 1970/01/01 昨日-)
# これらの開始日の間に変更されたすべてのファイル
$ print *(e:年齢 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-)
# 先頭を残して、末尾のパス名コンポーネントを削除します。 これは次のように機能します
# 「ディレクトリ名」.
$ エコー =ls(:h)
/ binに
# 先頭のパス名コンポーネントをすべて削除し、末尾を残します。 これは機能します
# 「ベース名」のように。
$ エコー =ls(:t)
ls
# 各ファイルからサフィックスを削除します (この例では *.sh)
$f:e は $f ファイル拡張子です
:h --> ヘッド (ディレクトリ名)
:t --> テール (ベース名)
:r --> 残り (拡張子を削除)
$ for f (*.sh) mv $f $f:r
# ルート名を残して、`.xxx' 形式のファイル名拡張子を削除します。
$ エコー $PWD
/ usr / src / linux
$ エコー $PWD:t
linuxの
# 拡張子以外をすべて削除します。
$ foo=23.42
$ エコー $foo
23.42
$ エコー $foo:e
42
# 新しいコマンドを表示しますが、実行はしません。 履歴でのみ機能します
# 拡張。
$ エコー =ls(:h)
/ binに
$ !エコー:p
$ エコー =ls(:h)
# 置換された単語を引用して、それ以上の置換をエスケープします。
$ bar="23'42"
$エコー$バー
23'42
$ エコー $bar:q
23 \ '42
# 単語をすべて小文字に変換します。
$バー=フーバー
$エコー$バー
フーバー
$ エコー $bar:l
foobar
# 単語をすべて大文字に変換します。
$バー=フーバー
$エコー$バー
foobar
$ エコー $bar:u
フーバー
# 単語の最初の文字を大文字に変換
$ foo="ワン ツー スリー フォー"
$ print -r -- "${(C)foo}"
XNUMX XNUMX XNUMX XNUMX
リダイレクトの例
詳細はこちら: ズシュミスク(1) 詳細については (または以下の ${^fpath}/zmv(N))
# すべての *.sh ファイルの末尾に「exit 1」を追加します。
$ echo "exit 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 > file1.gz) \
>> (bzip2 -9 > file1.bz2) \
>> (acb --best > file1.acb)
# 追加 /etc/services ファイル `foo' と `bar' の最後に
$猫 /etc/services >> フー >> バー
# パイプ STDERR
$ echo エラー >&2 2>&1 | sed -e 's/A/I/'
# XNUMX つのプロセスの標準出力を複数のプロセスの標準入力に送信する
# パイプラインで
$ setopt マルチオス
$ プロセス 1 > >(プロセス 1) > >(プロセス 2)
# 変数の初期化と同時に端末出力の保持
$ setopt マルチオス
$ { a=$(コマンド >&1 >& 3 3 > &- 2>&1);} 3>&1
# stderr を XNUMX 回リダイレクト
$ setopt multios ; プログラム 2> ファイル 2 > ファイル 1 2>&1
# stdout と stderr をログファイルに複製する
$ exec 3>&1 > ログファイル 2>&2 2>&1 >&3 3>&-
# stderr (のみ) をファイルと orig にリダイレクトします。 標準エラー:
$ コマンド 2>&2 2>stderr
# stderr と stdout を別々のファイルにリダイレクトし、両方を orig にリダイレクトします。 標準出力:
$ コマンド 2>&1 1>&1 2>stderr 1>stdout
# stderr と stdout を別々のファイルにリダイレクトし、stdout を orig にリダイレクトします。 標準出力
# AND stderr を元に。 標準エラー:
$ コマンド 2>&2 1>&1 2>stderr 1>stdout
# STDERR でもっと楽しく ;)
$ ./my-script.sh 2> >(grep -v moron >error.log)|プロセス出力 >output.log
$ echo "Thats STDOUT" >>(sed 's/stdout/別の例/' > foobar)
ZMV-例 (必要とする オートロード zmv)
注意: -n 実行しないことを意味します(何が起こるかを出力するだけです)。 で
# fat32 ファイル システムで不正な文字を削除します。 違法文字は
# / : ; * ? " < > |
# 注意: ``-Q'' と (D) は、隠しファイルを含めます。
$不要='[:;*?\"<>|]'
$ zmv -Q "(**/)(*$~unwanted*)(D)" '$1${2//$~unwanted/}'
# ファイル名の一部を変更 (例: "file-hell.name" -> "file-heaven.name")
$ zmv '(*)hell(*)' '${1}heaven${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」の名前をドットに置き換えて名前を変更します (最後の
# one!) スペース付き
$ touch {1..20}-file.with.many.dots.txt
$ zmv '(*.*)(.*)' '${1//./ }$2'
# ファイル名から最初の 4 文字を削除
$ zmv -n '*' '$f[5,-1]' # 注意: 「5」は書き間違いではありません!
# 現在のディレクトリの下にあるすべてのファイルの名前を小文字に変更しますが、そのままにしておきます
# ディレクトリ名そのまま。
$ 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=${ファイル%/*}
> name=${file##*/}
> newname=${名前//*([ -]) *([ -])/-}
> mv -i -- "$file" "$Dir/$newname"' {} {} \;
# ファイル名をクリーンアップして特殊文字を削除
$オートロードzmv
$ zmv -n '(**/)(*)' '$1${2//[^A-Za-z0-9._]/_}'
# ディレクトリ内の一連の python スクリプトに *.py を追加します (一部のスクリプトは終了します)
# *.py で、すべて適切な拡張子を付けます
$オートロードzmv
$ zmv -n '(**/)(con*)(#qe,file $REPLY | grep "python script",)' '$1$2.py'
# すべての拡張子 (*.JPG など) を小文字にします。 サブフォルダー
$オートロードzmv
$ zmv '(**/)(*).(#i)jpg' '$1$2.jpg'
# または - Zsh なし
$ find Dir -name '*.[jJ][pP][gG]' -print | fを読んでいる間
>します
> ケース $f で
> *.jpg) ;
> *) mv "$f" "${f%.*}.jpg" loading="lazy" ;
> エサック
> できました
# ファイル拡張子の先頭のゼロを削除
$オートロード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'
# ${HOME} 内のすべてのファイルに「.txt」拡張子を追加します
# ``-.'' は、通常のファイルまたは通常のファイルへのシンボリック リンクの名前のみを変更します。
# ``D'' は隠しファイル (ドットファイル) の名前も変更します)
$オートロードzmv
$ zmv -Q '/ home /**/*(D-.)''$f.txt'
# または、拡張子のないファイルの名前のみを変更するには:
$ zmv -Q '/ home /**/^?*.*(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' # 再帰的に
モジュールの例
読んでください zshモジュール(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/クローン)
# 現在のシェルのフォークされたインスタンスを作成し ($! はゼロに設定)、
# /dev/tty8 で「コマンド」を実行します (この例の場合)。
$ zmodload zsh/クローン
$ clone /dev/tty8 && (($! == 0)) && exec コマンド
zsh / datetime (必要とする zmodload zsh/日時)
$ zmodload zsh/日時
$ alias datereplacement='strftime "%Y-%m-%d" $EPOCHSECONDS'
$export DATE=`日付置換`
$ エコー $DATE
# ファイル名から日付を取り除く
$ $ zmodload zsh/日時
$ setopt 拡張グロブ
$ touch 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/日時
$ strftime -s file "abc_de_%m%d%Y.dat" $((EPOCHSECONDS - 24 * 60 * 60 ))
$ファイル=(**/$ファイル(N.L0))
$ (( $#files > 0 )) && print -rl -- $files | \
mailx -s "空のファイル" [メール保護]
zsh / stat (必要とする zmodload zsh/統計)
# シンボリック リンクが特定のファイルにリンクしているかどうかをテストする
$ zmodload -i zsh/stat
$ ! stat -LH s foo.ln || [[ $s[リンク] != "foo.exe" ]] || ln -sf foo.exe foo.ln
# ファイルの日付を比較する
$ zmodload zsh/stat
$ file1=foo
$ file2=バー
$ touch bar & sleep 5 & touch foo
$ echo $file1 は $(($(stat +mtime $file2) - \
$file1 より $(stat +mtime $file2))) 秒古い。
bar は foo より 5 秒古い
# 他のファイルより小さいディスクのファイルを一覧表示する
$ zmodload zsh/stat
$ stat -A max +size 他のファイル
$ 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 ユーザー +uid -- "$file" &&
> print -r -- "$user" "$file"
> できました
# ファイルの実際のバイト数と割り当てられたファイルのバイト数の差を取得する
$ zmodload zsh/stat
$ print $((($(stat +block -- ファイル) * 512 - $(stat +size -- ファイル)))
# 最大のファイルを見つける
# ``D'' : ドットファイルを含める (d の小文字はデバイス用)
# ``O'' : 逆順 (逆でない場合は o の小文字)
# ``L'' : ファイルの長さ (l はリンク数)
# ``[1]'': 最初のものだけを返す
$ zmodload zsh/stat
$ 統計 + サイズ ./*(DOL[1])
# ファイル サイズ (バイト単位)
$ zmodload zsh/stat
$ stat -L +サイズ 〜/ .zshrc
4707
# 過去 XNUMX 日間アクセスされていないディレクトリ内のファイルを削除する
# そして、ファイルの所有者に XNUMX つのメールを送信して、ファイルの所有者に通知します。
# 消す。
$ zmodload zsh/stat zsh/files
$ typeset -A f; f=()
$ rm -f /path/**/*(.a+10e{'stat -sA u +uidr $REPLY; f[$u]="$f[$u]$REPLY"'})
$ for user (${(k)f}) {print -rn $f[$user]|mailx -s "..." $user}
# ツリー内のすべてのファイルで "ls -l" を取得します。
# 指定年齢
$ zmodload zsh/stat
$ for d (. ./**/*(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]}
> CD ~-
>}
# ファイル作成日取得
$ zmodload zsh/stat
$ stat -F '%d %m %Y' +mtime 〜/ .zshrc
30 06 2004
$ stat -F '%D' +mtime 〜/ .zshrc
06/30/04
zsh / files (必要とする zmodload zsh/ファイル)
# 特定の文字列を含むファイルのディレクトリを検索し、それらをコピーします
# ファイルを別のディレクトリに移動します。
$ zmodload zsh/ファイル
$ IFS=$'\0'
$ cp $(grep -lZr foobar .) 他のディレクトリ
zsh / mapfile (必要とする zmodload zsh/マップファイル)
# XNUMX つのパターンの grep
$ zmodload zsh/マップファイル
$ pattern1="foo"
$ pattern2="バー フー"
$ print -l ./**/*(DN.e{'z=$mapfile[$REPLY] && [[ $z = *$pattern1* && \
$z = *$pattern2* ]]'})
# または zsh/pcre と組み合わせたソリューション
$ zmodload -i zsh/マップファイル zsh/pcre
$ pattern1="foo"
$ pattern2="バー フー"
$ pcre_compile "(?s)(?=.*?$pattern1).*?$pattern2"
$pcre_study
$ print -l ./**/*(DN.e{'pcre_match $mapfile[$REPLY]'})
# ``less' と同等 /etc/passwd | | grep -v ルート」
$ zmodload zsh/マップファイル
$ IFS=$'\n\n'
$ print -rl -- ${${=マップファイル[/etc/passwd]}:#*根*}
# または - 大文字と小文字を区別しない
$ setopt 拡張グロブ
$ print -rl -- ${${=マップファイル[/etc/passwd]}:#*(#i)ルート*}
# XML ファイルに `` のようなものが含まれている場合」と「 ''、 番号
# この空のタグ ('/>' で終わるもの)
# 順番、前のタグは `` 1 '' と
# `` 2 ''
$ zmodload zsh/マップファイル
$ cnt=0
$ apfile[data.xml.new]=${(S)mapfile[data.xml]//\
> (#イム) *<\/TAGA>/ $((++cnt))<\/TAGA>}
# ``filename="gone.src'' を含むユーザーの Maildir/new 内のすべてのファイルを削除する
$ zmodload zsh/{ファイル,マップファイル}
$ rm -f /u1/??/*/Maildir/new/100*(.e{'[[ $mapfile[$REPLY] == \
*filename=\"gone.scr\"* ]]'})
# ポストスクリプト ファイルからタイトルを grep し、その値を
# ファイル名の末尾
$ オートロード -U zmv
$ zmodload zsh/マップファイル
$ 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
$ print $((1e12 * rand48()))
847909677310.23413
$ print $(( rand48(シード)))
0.01043488334700271
zsh / termcap (必要とする zmodload zsh/termcap)
$ zmodload -ab zsh/termcap echotc
$ GREEN=`エコーAF 2`
$ YELLOW=`エコー AF 3`
$ RED=`エコーAF 1`
$ BRIGHTRED=`echotc md ; echotc AF 1`
$ print -l ${GREEN}緑 ${YELLOW}黄 ${RED}赤 ${BRIGHTRED}ブライトレッド
zsh / zpty (必要とする zmodload zsh/zpty)
$ zmodload zsh/zpty
$ zpty PW パスワード $1
$ zpty PW パスワード $1
# ``-r'': コマンド名の出力を読み取ります。
# ``z'' : パラメータ
$ zpty -r PW z '*パスワード:'
# 指定された文字列を入力としてコマンド名に送信します
$ zpty -w PW $2
$ zpty -r PW z '*パスワード:'
$ zpty -w PW $2
# -d オプションを指定した XNUMX 番目の形式は、コマンドを削除するために使用されます
# 以前に、名前のリストを提供することで開始しました。 名前がない場合
# を指定すると、すべてのコマンドが削除されます。 コマンドを削除すると HUP が発生する
# 対応するプロセスに送信されるシグナル。
$ zpty -d PW
zsh / net / socket (必要とする zmodload zsh/ネット/ソケット)
# ``-l'': ファイル名をリッスンするソケットを開きます
# ``-d'': 引数は、
# 繋がり
# ``3'' : ファイル記述子。 「Z-Shell のユーザーズガイド」を参照してください。
# (3.7.2: ファイル記述子)
$ zmodload zsh/ネット/ソケット
$ zsocket -l -d 3
# ``-a'': ソケットへの着信接続を受け入れる
$ zsocket -a -d 4 3
$ zsocket -a -d 5 3 # 接続を受け入れる
$ エコー foobar >&4
$ エコー バーフー >&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 open host.name.invalid user passwd || 出口
$ zftp get /remote/file > /local/file; r=$?
$ zftp close && exit r
# オンザフライで圧縮および ftp
$ autoload -U zfinit ; zfinit
$ zftp open host.name.invalid ユーザーパスワード
$ zftp get $file | bzip2 > ${file}.bz2
$ zftp 閉じる
# 再帰 ``get''
$ autoload -U zfinit ; zfinit
$ zfanon cr.yp.to
$ zfcdデーモンツール
$ for file in `zfls` ; 行う
> zfget $ファイル
$完了
$ zfclose
# $HOME/foobar (再帰的) にある通常のファイルのうち、新しいファイルをすべてアップロードします。
# ftp.foobar.invalid/path/to/upload まで XNUMX 時間
$ 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"
| | $ case "$yesno" in
| | > はい) command1;;
| | > *) command2;;
| | > エサック
「----」
$ zmodload zsh/zselect
$ if zselect -t 500 -r 0 && read yesno && [ yes = "$yesno" ]; それから
> コマンド1
> そうでなければ
> コマンド1
> ファイ
OPTIONS
ナビゲーション オプション
auto_cd (コマンドとして入力することで、ディレクトリに変更できます)。 auto_pushd
(プッシュ/ポップ リストにディレクトリを自動的に追加します) pushd_ignore_dups (そして複製しないでください)
それら)。
その他
no_hup (ZSH を終了するときに HUP シグナルをバックグラウンド ジョブに送信しないでください)。 print_exit_value (見せる
コマンドがゼロ以外の終了コードで戻った場合の終了コードを含むメッセージ)
沿革 オプション
hist_verify (ヒストリの展開後にユーザーがコマンドラインを編集できるようにします (例: !ls)
すぐに実行する代わりに) すべてのセッションに同じ履歴ファイルを使用します: セトプト
SHARE_HISTORY
プライバシー / セキュリティ
no_clobber (または -C を設定; 防止 > 指定されたファイルの切り捨てからのリダイレクト
もう存在している)
つづり 補正
正しい (コマンドのスペルを自動的に修正します)。 正しい_すべて (自動的
コマンドラインの各単語のスペルを修正します) ドヴォルザーク (ドヴォルザーク レイアウト)
未分類/その他
メールパス: 単純な複数のメールパス:
mailpath=($HOME/Mail/mbox'?mbox の新着メール'
$HOME/Mail/tux.u-strasbg'?new mail in tux'
$HOME/Mail/lilo'?lilo の新しいメール'
$HOME/Mail/ldap-fr'?ldap-fr 内の新しいメール')
メールパス: 動的メールパス:
typeset -a メールパス
私のために ~/メール/リスト/*(.); 行う
mailpath[$#mailpath+1]="${i}?${i:t} に新しいメールがあります。"
行われ
特別なコマンドでのグロビングを避ける:
エイリアス expr の com の場合、mattrib mcopy mdir mdel を見つけます。
エイリアス $com="noglob $com"
bashprompt を zsh に移行するには、zsh にあるスクリプト bash2zshprompt を使用します。
ソース配布 その他.
(t)csh から zsh への移行には、csh エイリアスを変換する c2z ツールを使用し、
環境変数とシェル変数を zsh に追加します。 これは、csh を実行し、csh レポートを作成することによって行われます。
エイリアスと変数について。 次に、スクリプトはこれらを zsh 起動ファイルに変換します。 いくつかあります
このスクリプトの冒頭に記載されている問題と使用法に関する情報。
のタイトルとハードステータスを設定する関数は次のとおりです。 XTerm または GNU 画面 〜へ zsh
プロンプトが表示されたときの現在のディレクトリ、およびコマンド名
コマンドが実行されると、それぞれコマンドラインの残りの部分と残りの部分が表示されます。
関数のタイトル {
if [[ $TERM == "スクリーン" ]]; それから
# GNU Screen には次の XNUMX つを使用します。
print -nR $' 33k'$1$' 33'\
print -nR $' 33]0;'$2$''
elif [[ $TERM == "xterm" || $TERM == "rxvt" ]]; それから
# XTerm の代わりにこれを使用します。
print -nR $' 33]0;'$*$''
fi
}
function precmd { title zsh "$PWD" }
関数 preexec {
エミュレート -L zsh
ローカル -a cmd; cmd=(${(z)1})
title $cmd[1]:t "$cmd[2,-1]"
}
次の行を 〜/ .screenrc この派手なハードステータスを表示するには:
キャプションは常に "%3n %t%? (%u)%?%?: %h%?"
割り当てられる特殊変数:
$LINENO $RANDOM $SECONDS $COLUMNS $HISTCHARS $UID
$EUID $GID $EGID $USERNAME $fignore $mailpath $cdpath
LINKS
プライマリ サイト
http://www.zsh.org/
プロジェクトページ
http://sourceforge.net/projects/zsh/
sunsite.dk の Z シェルページ
http://zsh.sunsite.dk/
Bash から Z シェルへ: コマンド ラインの克服 - 本
http://www.bash2zsh.com/
Sven Guckes と Julius Plenz による「Zsh - die magische Shell」 (Zsh に関するドイツ語の本)
http://zshbuch.org/
メーリングリストアーカイブ
http://www.zsh.org/mla/
ZSH-よくある質問
http://zsh.dotsrc.org/FAQ/
ユーザーガイド
http://zsh.sunsite.dk/Guide/
ZSHウィキ
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 の ZSH ページ
http://www.adamspiers.org/computing/zsh/
Zzappers ベストオブ ZSH のヒント
http://www.rayninfo.co.uk/tips/zshtips.html
Christian SchneiderによるZsh Webページ
http://www.strcat.de/zsh/
zsh愛好家のウェブページ
http://grml.org/zsh/
IRCチャネル
#zsh at irc.freenode.org
Z shell リファレンスカード (zsh-lovers debian-package に含まれています)
http://www.bash2zsh.com/zsh_refcard/refcard.pdf
作者
このマンページは、Christian の Michael Prokop によって書かれました。 ストラキャット シュナイダーとマティアス
コプファーマン。 しかし、zsh-メーリングリストなど、zsh-geeks から多くのアイデアが取り入れられています。
(zsh-users および zsh-workers)、google、ニュースグループ、および zsh-Wiki。 あなたのクールとありがとう
信じられないほどのヒント。 私たちはあなたから多くのことを学びました!
アルファベット順:
アンドリュー「ゼフラム」メイン - http://www.fysh.org/~zefram/
バートン・E・シェーファー - 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
onworks.net サービスを使用してオンラインで zsh-lovers を使用する