Tip #166, #167, #168, #169
Submitted by Christian Schneider on Mi, 2017-10-11 19:52
# List the unbroken sysmlinks under a directory.
$ ls -ld /my/path/**/*(D@-^@)
# rename file contents with its directory name as a prefix
$ zmv '(*)/(*.txt)' '${1}_$2'
# sorting file's names in ascending order according to the last two numerical fields of the files
# names. And then cat these files into one based on the ascending order depicted here.
$ find . -type f -regex ".*[.][0-9]+[.][0-9]+$" -print0 |sort -Vz | xargs -r0 cat > myfile
# or - with zsh -
$ cat ./*.<->.<->(n)
# Eliminate the duplicated elements of an array and keep the remain emements order appeared in the original array.
$ a=( a a f 1 3 b b 3 5 4 4 )
$ a=("${(u@)a")
Tip #165: Zsh-Completion von Aliasen
Submitted by Christian Schneider on So, 2016-09-25 20:22
Wenn man wie ich grc oder ähnliche Programme verwendet, dann hat man Programme wie z. B. ping(8) als Alias:
Das funktioniert zwar und sieht auch gut aus, aber die Tab-Completion der Zsh funktioniert dann nicht mehr wenn man z. B.
if [[ -x `which grc` ]]; then
alias ping='grc ping'
alias netstat='grc netstat'
alias diff='grc diff'
[...]
fi
Das funktioniert zwar und sieht auch gut aus, aber die Tab-Completion der Zsh funktioniert dann nicht mehr wenn man z. B.
ping -<TAB>
eingibt. Umgehen kann man das, indem man anstelle eines Alias das ganze in eine Shellfunktion packt, also$ ping() { grc --colour=auto /usr/bin/ping "$@" }Danach funktioniert es auch mit der Vervollständigung wieder.
Tip #161, #162, ,#163, #164
Submitted by Christian Schneider on So, 2016-09-18 19:39
# executing commands in directories containing specific files. I. e. "find $HOME -type f -name '*.tex'" and
# remove *.tex
$ rm **/*.tex(.e['reply=(${REPLY:r}.aux)'])
# But you can also use colon-modifiers as glob qualifiers, so if the .tex never appears anywhere but at the end:
$ rm **/*.tex(.:s/.tex/.aux)
# If you've already got the filenames, say, in an array:
$ texi=( $(find $HOME -type f -name '*.tex') )
# rm ${^texi:r}.aux
# List ALL files modified in last 24hrs OR list atleast 10 recent files
$ ls -rlU --sort=time *(N.mh-24) *(N.Om[-10,-1])
# To remove the duplicates, you can assign the results to an array, then expand only the uniqe elements with ${(u)array}.
$ (){ ls -lU "${(u)@}" } *(N.mh-24Om) *(N.Om[-10,-1])
# ZSH equivalent to "find . -ctime -1 -type d -exec mv {} /foo/"
$ echo mv -- *(/ch-1) /foo/
# repeat an argument N times
$ echo file2${^${:-{1..10}}/*/}
# Sub-folders in $PATH
$ path+=(/usr/local/bin /usr/bin /bin /usr/local/sbin /usr/sbin /sbin ~/bin/**/*(/N)
Todo-Liste fuer meinen Urlaub
Submitted by Christian Schneider on So, 2010-12-19 14:10
⇒ zsh-lovers.de.1 ins git-Repo von GRML hochladen (Wo zum Teufel sind meine Keys dafür verdammt?!)
⇒ tmux konfigurieren und feinjustieren
⇒ Mein Theme für Irssi umschreiben bzw. ein neues Theme erstellen
⇒ Mir überlegen wo ich dieses Jahr Silvester verbringe; wird immer schwieriger einen Platz ohne Menschen zu finden.
⇒ Neues Handy aussuchen; mein BlackBerry tut zwar noch, aber nach drei Jahren Dauereinsatz ist es schon ziemlich runtergekommen.
Und - last, but not least - ich brauche ein wirksamesHeilGegenmittel gegen diese technischen Vollpfeifen, mit denen ich ständig beruflich zu tun habe. Frage des Jahres war eindeutig Können wir da den "I like it!"-Button von Facebook implementieren?. Hört sich eigentlich nicht weiter wild an; also mal davon abgesehen das ich Nutzer von Facebook für schmerzbefreite Vollpfosten halte. Nur habe ich da gerade einen Mailinglisten-Server aufgesetzt und der Admin wollte den Button als Standardsignatur in allen Mails der Mailingliste eingebunden haben. Und Nein! Das habe ich mir nicht gerade ausgedacht. Solche Typen laufen in Deutschland wirklich frei rum!
⇒ tmux konfigurieren und feinjustieren
⇒ Mein Theme für Irssi umschreiben bzw. ein neues Theme erstellen
⇒ Mir überlegen wo ich dieses Jahr Silvester verbringe; wird immer schwieriger einen Platz ohne Menschen zu finden.
⇒ Neues Handy aussuchen; mein BlackBerry tut zwar noch, aber nach drei Jahren Dauereinsatz ist es schon ziemlich runtergekommen.
Und - last, but not least - ich brauche ein wirksames
in Job, Privat, Zsh
|
2 Kommentare
|
Keine Trackbacks
Tags für diesen Artikel: admin, blackberry, facebook, git, grml, handy, irssi, mailinglisten, tmux, zsh-lovers
Update der Zsh - fortune-cookies
Submitted by Christian Schneider on Fr, 2009-03-13 03:08
Ich hab vorhin neue fortune-cookies hochgeladen, welche alle Tipps von http://strcat.de/zsh/ enthalten. Zu finden sind die fortune-cookies unter http://www.strcat.de/tmp/zsh-fortunes.tar.gz. Nach dem Herunterladen können die mit
Die Cookies aktualisiere nur unregelmäßig! Neue Tipps/Oneliner werden zuerst hier im Blog und anschließend auf http://strcat.de/zsh/ veröffentlicht (kann aber einige Tage dauern bis letzter aktuell mit dem Blog ist). Ich werd bei Interesse mal ein Script schreiben mit dem man aus der index.html meiner Zsh-Seite automatisch ein Cookie-File für fortune(8) erstellt. Das GIT-Repo der zsh-lovers von grml.org update ich demnächst wenn ich die zsh-lovers(1) aktualisiert hab.
tar -xzf zsh-fortunes.tar.gz
entpackt werden und es wird ein Verzeichnis Namens zsh-fortune erstellt, in dem zwei Dateien liegen. Zum einen die zsh-fortunes welches die "Rohdatei" des Cookiefiles ist und zum anderen die zsh-fortunes.dat welches die eigentliche Datenbank ist, die von fortune(8) gelesen wird. Beide Dateien müssen in ein Verzeichnis kopiert werden und können dann mit fortune zsh-fortunes
angezeigt werden. Nach dem Kopieren die passenden Rechte mit chmod(1) setzen (0644 reicht) und dann sollte ein fortune -f
das neu hinzugekommene Cookie anzeigen. Alternativ dazu kann man fortune(8) direkt das Verzeichnis angeben, in dem die Cookies liegen; also fortune ~/cookies/zsh-fortunes
oder whatever.Die Cookies aktualisiere nur unregelmäßig! Neue Tipps/Oneliner werden zuerst hier im Blog und anschließend auf http://strcat.de/zsh/ veröffentlicht (kann aber einige Tage dauern bis letzter aktuell mit dem Blog ist). Ich werd bei Interesse mal ein Script schreiben mit dem man aus der index.html meiner Zsh-Seite automatisch ein Cookie-File für fortune(8) erstellt. Das GIT-Repo der zsh-lovers von grml.org update ich demnächst wenn ich die zsh-lovers(1) aktualisiert hab.
Tip #154, #155, #156, #157, #158, #159, #160
Submitted by Christian Schneider on So, 2009-03- 8 16:53
# List all files older than 15mins
$ ls -ldrt -- *(mm+15)
# Just regular files
$ ls -ldrt -- *(.mm+15)
# the age of the pointed to file for symlinks
$ ls -Lldrt -- *(-mm+15)
# Use find(1) to find all directories except the ".svn" ones, then use grep on all *.c/*.h/*.S
# files in each directory.
$ setopt extendedglob
$ grep pattern (^.svn/)#*.[xhS](.) # skips dot files and dot directories
# or - without Zsh
$ find . -type d ! -name .svn | sed 's/./\\&/g;s|.*|grep whatever &/*.[xhS]|' | sh
# Quote from Usenet
# > I need to write a script that searches through a folder on my Linux
# > home server and copies only files where the width is greater than the
# > height, but it also needs to flatten the directory structure and
# > rename files as it copies. So the first picture found may be several
# > directories deep in the source but this should be copied to the root
# > of the SD card and named say 00000001.JPG and the next file found
# > where width > height should be copied and renamed 00000002.JPG.
width_greater_than_height() {
local w h
identify -format '%w %h' ${1-$REPLY} |
read w h && ((w > h))
}
typeset -Z8 i=0
setopt extendedglob
for f (**/*.(#i)jp(e|)g(D.+width_greater_than_height)) {
((i++))
cp -- $f /path/to/dest/$i.JPG
}
# remove leading zeros
$ var=00004402
$ echo ${var##0#}
# or
$ var=00004402
$ echo ${var/(#m)<->/$((MATCH))}
# find all directories, list their contents and output the first item in the above list.
$ print -rl /home/me/**/*(D/e{'reply=($REPLY/*(N[-1]:t))'})
# rename a section of a filename, i. e. example.1.{txt,conf,db} or 12345.1.{wav,ogg,mp3} and
# change the 1 to a 2 in the filename while preserving the rest of it.
$ zmv -n '(*.)(<->)(.[^.]#)' '$1$(($2+1))$3' # would rename x.0001.y to x.2.y.
$ zmv -n '(*.0#)(<->)(.[^.]#)' '$1$(($2+1))$3'
# Rename files to lower case
$ zmv '*' '${(L)f}'
Mental note to self: fortune(6)-Cookies, meine Zsh-Seite und zsh-lovers(1) aktualisieren und das zsh-lovers - Repo von grml.org sync'en.
enable == disable
Submitted by Christian Schneider on Do, 2009-02-12 01:16
Jo. Is so! Zumindest wenn man sich z. B. mutt-1.5.19.tar.gz herunterlädt, entpackt und mit der Tab-Completion der Zsh arbeitet. Das sieht dann so aus:
Ich bin zu müde dafür.
$ zsh -fMutt nur als Beispiel, weil ich die Sourcen grad parat hatte. Wer Zeit/Lust hat kann einen Bugreport schreiben bzw.
$ autoload -U compinit ; compinit
$ cd mutt-1.5.19
$ ./configure --enable-<TAB>
--enable-debug -- Enable debugging support
--enable-dependency-tracking -- do not reject slow dependency extractors
--enable-dependency-tracking -- speeds up one-time build
--enable-exact-address -- Enable regeneration of email addresses
--enable-external-dotlock -- Force use of an external dotlock program
--enable-fcntl -- Do NOT use fcntl() to lock files
--enable-flock -- Use flock() to lock files
--enable-full-doc -- Omit disabled variables
--enable-gpgme -- Enable GPGME support
--enable-hcache -- Enable header caching
--enable-iconv -- Disable iconv support
--enable-imap -- Enable IMAP support
--enable-largefile -- omit support for large files
--enable-locales-fix -- The result of isprint() is unreliable
--enable-mailtool -- Enable Sun mailtool attachments support
--enable-nfs-fix -- Work around an NFS with broken attributes caching
--enable-nls -- Do not use Native Language Support
--enable-pgp -- Disable PGP support
--enable-pop -- Enable POP3 support
--enable-smime -- Disable SMIME support
--enable-smtp -- include internal SMTP relay support
--enable-warnings -- Turn off compiler warnings (not recommended)
${^fpath}/_configure(N)
umschreiben.Ich bin zu müde dafür.
Alles geht mit der Zsh ja nu auch wieder nich
Submitted by Christian Schneider on Do, 2008-11- 6 13:56
$ grep HG ~Z/zshmisc
hash -d HG=~/download/Source/Repos # HG/GIT/SVN/..- Repos
$ HG
Error! Correct HG to hg ? [No/Yes/Abort/Edit]:
[ Ich hasse es wenn meine Shell denkt sie weiss es besser als ich! ]
$ nocorrect hash -d HG=~/download/Source/Repos
$ HG
Error! Correct HG to hg ? [No/Yes/Abort/Edit]:
[ Haette mich auch gewundert ]
Na gut.. dann werd ich entweder meine hash-Builtins aendern oder damit leben muessen *sigh*
// Edit: Man sollte evtl. erst die *.zwc neu kompilieren bevor man die Schnauze aufreisst *sigh*
Meine Dotfiles sind wieder online
Submitted by Christian Schneider on Di, 2008-11- 4 14:18
Meine Dotfiles sind wieder online. Vorerst habe ich sie auf http://github.com/strcat/dotfiles/tree/master ausgelagert, weil es das Updaten fuer mich einfacher macht. Ggf. werde ich sie wieder wie davor auf eine normale Seite stellen, aber das wird sich zeigen.
Um mein Repo zu clonen einfach
Um mein Repo zu clonen einfach
git clone git://github.com/strcat/dotfiles.git
eingeben und es wird ein Verzeichnis Namens dotfiles erstellt, in dem dann meine Konfigurationsdateien enthalten sind. Sollte ich irgendwelche vergessen haben, dann einfach kurz Bescheid sagen und ich kuemmere mich drum.
Zsh 4.3.9 released
Submitted by Christian Schneider on Mo, 2008-11- 3 17:19
http://www.zsh.org/mla/users/2008/msg01041.html
I've uploaded 4.3.9 to ftp.zsh.org. The main changes are a few fixes to
the internals of the completion system which turned up at the last
minute, plus a fix to deconfuse argument handling for builtins that do
there own option handling; otherwise it will behave like 4.3.8.
Last ten comments: