Манипулирование командами из history с помощью !! и !$:
1. !! (bang-bang) - эквивалентен последней команде в истории, т. е. ввод !! равнозначен повторному вводу последней команды.
2. !$ (bang-dollar) - эквивалентен последнему аргументу последней команды в истории.
3. !$:h - удаляет последнее поле из вывoда !$
# ls /usr/src/linux
# !$
/usr/src/linux
# !$:h
/usr/src
4. !$:t - оставляет только последнее поле из вывода !$
# ls /usr/src/linux
# !$
/usr/src/linux
# !$:t
linux
5. !$:r - удаляет расширение файла из последнего поля вывода !$
# ls /usr/portage/distfiles/nano-2.2.0.tar.gz
/usr/portage/distfiles/nano-2.2.0.tar.gz
# !$:r
/usr/portage/distfiles/nano-2.2.0.tar
# ls /usr/portage/distfiles/nano-2.2.0.tar.gz /usr/portage/distfiles/nano-2.2.0.tar.gz
# !$:r:r
/usr/portage/distfiles/nano-2.2.0
6. !$:е - оставляет только расширение файла из последнего поля вывода !$
# ls /usr/portage/distfiles/nano-2.2.0.tar.gz
/usr/portage/distfiles/nano-2.2.0.tar.gz
# !$:e
gz7. !-n$ - вывести аргумент минус n-ой команды из истории
# cd /tmp # wget
http://www.example.com/path/KickassApplicationSuite.tar.gz# cd /usr/local/src/
# mkdir!-2 $:t:r:r <- создаёт директорию 'KickassApplicationSuite'
# cd!$ <- перейти во вновь созданную 'KickassApplicationSuite'
# tar xvzf /tmp/!-4 $:t <- эквивалентно 'tar xvzf /tmp/KickassApplicationSuite.tar.gz'
8. !* (bang-asterisk) - означает все аргументы последней команды.
-
Использование {}
$ cp filename{,-old} <- cp filename-old
$ cp filename{-old,} <- cp filename-old filename
$ cp filename{-v1,-v2} <- cp filename-v1 filename-v2
$ touch a{1,2,3}b <- создаёт файлы а1b, a2b, a3b
$ touch {p2,pv,av,}p <- создаёт файлы p2p, pvp, avp и p
$ ls /usr/{,local/}{,s}bin/jojo <- ls /usr/bin/jojo /usr/sbin/jojo /usr/local/bin/jojo /usr/local/sbin/jojo
$ apt-get remove -purge ppp{,config,oe{,conf}} <- apt-get remove -purge ppp pppconfig pppoe pppoeconf
---
Расширеные маски файлов в zsh
Просмотреть скриншоты по маске ~/pics/desktop-200* отсортированные по времени модификации (самые новые, будут идти первыми).
$ ls ~/pics/desktop-200*(om)
Что бы запомнить:
o от order - порядок
m от modification time - время модификации
Просмотреть последний скриншот
$ ls ~/pics/*(om[1])
Залить последние четыре фотографии с мобилы на хостинг по scp
$ scp ~/photo/mobile/se_24/*(om[1,4]) photo.hosting.org:~/www/data/tmp/se_24/
Подробнее о спецификаторах к маскам файлов можно узнать в man zshexpn в разделе Glob Qualifiers
$ less-p'Glob Qualifiers' \man zshexpn
---
Правильная маска для копирования dot-файлов в zsh так:
cp -r .*~(.|..)(^@) backup-dir
.* "все файлы начинающиеся с точки"
~ "отрицание,все маски что идут после ~ не влючены в результат"
(.|..) "имя файлов . или .."
(^@) "не символические ссылки"
---
Удалить разом битые символические ссылкив zsh можно так
$ rm *(-@)
Источник:
linsovet.com/zsh-remove-symbolic-links-without-a-target