zsh-workers, google, newsgroups and from ourself. See section *LINKS* for
details.
-Note: This manpage (zsh-lovers(1)) is *not* an offical part of the Z shell! It's
+Note: This manpage (zsh-lovers(1)) is *not* an official part of the Z shell! It's
just a just for fun - manpage ;) +
For comments, bugreports and feedback take a quick look at the section *BUGS*.
$ grep alias ~/.zsh/* C
443
----------------------
-Some more or less useful global aliases (choose whether they are useful or not
+Some more or less useful global aliases (choose whether they are useful or not
for you on your own):
--------------------------------------------------------
---------------------------------------------------------------------------------------------------
If you end up using a directory as argument, this will remove the
-trailing slash (usefull in ln)
+trailing slash (useful in ln)
---------------------------------------------------------------------------------------------------
zstyle ':completion:*' squeeze-slashes true
---------------------------------------------------------------------------------------------------
zstyle ':completion:*:cd:*' ignore-parents parent pwd
---------------------------------------------------------------------------------------------------
+Another method for 'quick change directories'. Add this to your ~/.zshrc, then just enter
+``cd ..../dir''
+---------------------------------------------------------------------------------------------------
+rationalise-dot() {
+ if [[ $LBUFFER = *.. ]]; then
+ LBUFFER+=/..
+ else
+ LBUFFER+=.
+ fi
+}
+zle -N rationalise-dot
+bindkey . rationalise-dot
+---------------------------------------------------------------------------------------------------
+
UNSORTED/MISC examples
~~~~~~~~~~~~~~~~~~~~~~
Hint: A list of valid glob Qualifiers can be found in zshexpn(1).
See ``man 1 zshexpn | less -p'' Qualifiers for details.
-------------------------------------------------------------------------------
+# Get the names of all files that *don't* match a pattern *anywhere* on the
+# file (and without ``-L'' because its GNUish)
+ $ print -rl -- *(.^e{'grep -q pattern $REPLY'})
+ # or
+ $ : *(.e{'grep -q pattern $REPLY || print -r -- $REPLY'})
+
+# random numbers
+ $ echo $[${RANDOM}%1000] # random between 0-999
+ $ echo $[${RANDOM}%11+10] # random between 10-20
+ $ echo ${(l:3::0:)${RANDOM}} # N digits long (3 digits)
+
+# reverse a word
+ $ echo "${(j::)${(@Oa)${(s::):-hello}}}"
+
+# Show newest directory
+ $ ls -ld *(/om[1])
+
+# random array element
+ $ FILES=( .../files/* )
+ $ feh $FILES[$RANDOM%$#FILES+1]
+
+# cat first line in all files in this dir
+ $ for file (*(ND-.)) IFS= read -re < $file
+
# test if a parameter is numeric
$ if [[ $1 == <-> ]] ; then
echo numeric
fi
# Show me all the .c files for which there doesn't exist a .o file.
- $ c=(*.c) o=(*.o(N)) eval 'ls ${${c:#(${~${(j:|:)${o:r}}}).c}:?done}'
+ $ print *.c(e_'[[ ! -e $REPLY:r.o ]]'_)
# All files in /var/ that are not owned by root
$ ls -ld /var/*(^u:root)
# All files for which the owner hat read and execute permissions
$ echo *(f:u+rx:)
-# The same, but also others dont have execute permissions
+# The same, but also others don't have execute permissions
$ echo *(f:u+rx,o-x:)
# brace expansion - example
# Remove zero length and .bak files in a directory
$ rm -i *(.L0) *.bak(.)
-# print out files that dont have extensions
+# print out files that don't have extensions
$ printf '%s\n' ^?*.*
$ printf '%s\n' ^?*.[^.]*(D)
$ ls -d -- ^?*.*(D)
# see above, but now omit executables
$ ls **/*~*(${~${(j/|/)fignore}})(.^*)
-# Print out files that dont have extensions (require *setopt extendedglob*
+# Print out files that don't have extensions (require *setopt extendedglob*
# and *setopt dotglob*)
$ printf '%s\n' ^?*.*
# Show only empty files which nor `group' or `world writable'
$ ls *(L0f.go-w.)
-# find - and list - the ten newest files in directories and subdirs
+# Find - and list - the ten newest files in directories and subdirs.
# (recursive)
$ print -rl -- **/*(Dom[1,10])
-# Print only 5 lines by "ls" command (like ``ls -laS | head -n 5'')
+# Print only 5 lines by "ls" command (like ``ls -laS | head -n 5'').
$ ls -fl *(DOL[1,5])
-# display the 5-10 last modified files
+# Display the 5-10 last modified files.
$ print -rl -- /path/to/dir/**/*(D.om[5,10])
-# find all files without a valid owner
+# Find all files without a valid owner.
$ chmod someuser /**/*(D^u:${(j.:u:.)${(f)"$(</etc/passwd)"}%%:*}:)
-# find all the empty directories in a tree
+# Find all the empty directories in a tree.
$ for f in ***/*(/l2); do foo=($f/*(N)); [[ -z $foo ]] && print $f; done
# Note:Since Zsh 4.2.1 the glob qualifier F indicates a non-empty directory.
# Hence *(F) indicates all subdirectories with entries, *(/^F) means all
# subdirectories with no entries.
$ ls -ld *(/^F)
-# remove empty directories afterwards
+# Remove empty directories afterwards.
$ rmdir ./**/*(/od) 2> /dev/null
-# Show only files are owned from group `users'
+# Show only files which are owned by group `users'.
$ ls -l *(G[users])
-------------------------------------------------------------------------------
returned by parameter, filename and history expansion. See zshexpn(1)
for details.
-------------------------------------------------------------------------------
+# NOTE: Zsh 4.3.4 needed!
+ $ autoload -U age
+# files modified today
+ $ print *(e:age today now:)
+# files modified since 5 pm
+ $ print *(e-age 17:00 now-)
+# ... since 5 o'clock yesterda
+ $ print *(e-age yesterday,17:00 now-)
+# ... from last Christmas before today
+ $ print *(e-age 2006/12/25 today-)
+# ... before yesterday
+ $ print *(e-age 1970/01/01 yesterday-)
+# all files modified between the start of those dates
+ $ print *(e:age 2006/10/04 2006/10/09:)
+# all files modified on that date
+ $ print *(e:age 2006/10/04:)
+# Supply times.
+ $ print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)
+
# Remove a trailing pathname component, leaving the head. This works like
# `dirname'.
$ echo =ls(:h)
# convert 1st char of a word to uppercase
$ foo="one two three four"
- $ print -r -- "${(C)var}"
+ $ print -r -- "${(C)foo}"
One Two Three Four
-------------------------------------------------------------------------------
Redirection-Examples
~~~~~~~~~~~~~~~~~~~~
-See zshmisc(1) for more informations (or less ${^fpath}/zmv(N))
+See zshmisc(1) for more information (or less ${^fpath}/zmv(N))
-------------------------------------------------------------------------------
# Append `exit 1' at the end of all *.sh - files
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Note:* '-n' means no execution (just print what would happen). At
-------------------------------------------------------------------------------
+# Remove illegal characters in a fat32 file system. Illegal characters are
+# / : ; * ? " < > |
+# NOTE: ``-Q'' and (D) is to include hidden files.
+ $ unwanted='[:;*?\"<>|]'
+ $ zmv -Q "(**/)(*$~unwanted*)(D)" '$1${2//$~unwanted/}'
+
+# Changing part of a filename (i. e. "file-hell.name" -> "file-heaven.name")
+ $ zmv '(*)hell(*)' '${1}heaven${2}'
+ # or
+ $ zmv '*' '$f:s/hell/heaven/'
+
+# remove round bracket within filenames
+# i. e. foo-(bar).avi -> foo-bar.avi
+ $ zmv '*' '${f//[()]/}'
+
# serially all files (foo.foo > 1.foo, fnord.foo > 2.foo, ..)
$ autoload zmv
$ ls *
$ ls *
1.c 1.foo 2.foo 3.foo 4.foo foo.fnord
-# Rename "file.with.many.dots.txt" by substituting dots (exept for the last
+# Rename "file.with.many.dots.txt" by substituting dots (except for the last
# one!) with a space
$ touch {1..20}-file.with.many.dots.txt
$ zmv '(*.*)(.*)' '${1//./ }$2'
zsh/stat (require zmodload zsh/stat)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-------------------------------------------------------------------------------
+# test if a symbolic link links to a certain file
+ $ zmodload -i zsh/stat
+ $ ! stat -LH s foo.ln || [[ $s[link] != "foo.exe" ]] || ln -sf foo.exe foo.ln
+
# comparing file dates
$ zmodload zsh/stat
$ file1=foo
# If a XML-file contains stuff like ``<TAGA/>'' and ``<TAGB/>'', number
# this empty tags (ones ending in '/>') so if encountered in the same
-# order, the preceeding tags would become ``<TAGA/>1</TAGA>'' and
+# order, the preceding tags would become ``<TAGA/>1</TAGA>'' and
# ``<TAGB/>2</TAGB>''
$ zmodload zsh/mapfile
$ cnt=0
LINKS
-----
Primary site::
- *http://www.zsh.org/[]*
+ *http://www.zsh.org/[]*
Project-page::
- *http://sourceforge.net/projects/zsh/[]*
+ *http://sourceforge.net/projects/zsh/[]*
Z shell page at sunsite.dk::
*http://zsh.sunsite.dk/[]*
From Bash to Z Shell: Conquering the Command Line - the book::
*http://www.bash2zsh.com/[]*
+"Zsh - die magische Shell" (german book about Zsh) by Sven Guckes and Julius Plenz::
+ *http://zshbuch.org/[]*
Mailinglistarchive::
*http://www.zsh.org/mla/[]*
ZSH-FAQ::
- *http://www.zsh.org/FAQ/[]*
+ *http://zsh.dotsrc.org/FAQ/[]*
Userguide::
*http://zsh.sunsite.dk/Guide/[]*
ZSH-Wiki::
- *http://www.zshwiki.org/[]*
-Die Zsh als interaktive Shell::
- *http://cssun.rrze.uni-erlangen.de/~sipakale/zshreferat.html[]*
+ *http://zshwiki.org/home/[]*
A short introduction from BYU::
- *http://docs.cs.byu.edu/docs/zsh/index.php[]*
+ *http://docs.cs.byu.edu/linux/advanced/zsh.html[]*
Mouse-Support ;)::
*http://stchaz.free.fr/mouse.zsh[]*
-Shell Corner: Zsh Suite of "keeper" Functions::
- *http://www.unixreview.com/documents/s=9513/ur0501a/ur0501a.htm[]*
-The Z Shell (A Fan Page)::
- *http://www.princeton.edu/~kmccarty/zsh.html[]*
-Making the Transition to Zsh::
- *http://www.linux-mag.com/cgi-bin/printer.pl?issue=2002-05&article=power[]*
Curtains up: introducing the Z shell::
*http://www-128.ibm.com/developerworks/linux/library/l-z.html?dwzone=linux[]*
-ZSH-Liebhaberseite::
+ZSH-Liebhaberseite (german)::
*http://michael-prokop.at/computer/tools_zsh_liebhaber.html[]*
-ZSH-Seite von Michael Prokop::
- *http://www.michael-prokop.at/computer/tools_zsh.html[]*
-A Case for the Z Shell on *http://www.daemonnews.org/[]*::
- *http://ezine.daemonnews.org/199910/zsh.html[]*
-ZSH-Section from Dotfiles.com::
- *http://www.dotfiles.com/index.php?app_id=4[]*
-Writing Zsh Completion Functions::
- *http://www.linux-mag.com/2002-07/power_01.html[]*
+ZSH-Seite von Michael Prokop (german)::
+ *http://michael-prokop.at/computer/tools_zsh.html[]*
ZSH Prompt introduction::
*http://aperiodic.net/phil/prompt/[]*
+ft's zsh configuration::
+ *http://ft.bewatermyfriend.org/computer/zsh.html[]*
Adam's ZSH page::
*http://www.adamspiers.org/computing/zsh/[]*
Zzappers Best of ZSH Tips::
*http://www.rayninfo.co.uk/tips/zshtips.html[]*
Zsh Webpage by Christian Schneider::
- *http://strcat.de/wiki/zsh/[]*
- *http://strcat.de/wiki/zsh-german[]* (German translation. Help needed!)
+ *http://www.strcat.de/zsh/[]*
The zsh-lovers webpage::
*http://grml.org/zsh/[]*
IRC channel::
zsh Zsh overview
zshall Tthe Z shell meta-man page
zshbuiltins Zsh built-in commands
- zshcompctl Zsh completion control
+ zshcalsys zsh calendar system
+ zshcompctl zsh programmable completion
zshcompsys Zsh completion system
zshcompwid Zsh completion widgets
zshcontrib User contributions to zsh