From 84d5d9d7ba506eae78f352d9c1d49fef3efaf7a5 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Wed, 22 Jan 2014 14:13:07 +0400 Subject: [PATCH] added rm func to zshrc --- _posts/2014-01-14-about-zshrc.html | 38 +++++++++++++++++++++++++-- about.html | 2 +- ru/_posts/2014-01-14-about-zshrc.html | 38 +++++++++++++++++++++++++-- ru/about.html | 2 +- 4 files changed, 74 insertions(+), 6 deletions(-) diff --git a/_posts/2014-01-14-about-zshrc.html b/_posts/2014-01-14-about-zshrc.html index e0b5279..bbc4652 100644 --- a/_posts/2014-01-14-about-zshrc.html +++ b/_posts/2014-01-14-about-zshrc.html @@ -267,8 +267,6 @@ alias du='show_which du && du -k --total --human-readable' # change less and zless to vimpager alias less='vimpager' alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I' {% endhighlight %}

Here are ls aliases (see man ls):

@@ -424,6 +422,42 @@ su () { } {% endhighlight %} +

Function that replaces original rm command. If you type rm it will be equivalent moving to trash an you can easily restore a file:

+{% highlight bash %} +rm () { + # error check + [ $# -eq 0 ] && { echo "Files are not set!"; return 1 } + # set trash path + TRASHDIR="$HOME/.local/share/Trash" + TRASHFILE="${TRASHDIR}/files" + TRASHINFO="${TRASHDIR}/info" + for DIRECTORY in "${TRASHDIR}" "${TRASHFILE}" "${TRASHINFO}"; do + if [ -e "${DIRECTORY}" ]; then + [ -d "${DIRECTORY}" ] || { echo "'${DIRECTORY}' is a file"; return 1 } + else + mkdir -p -m755 "${DIRECTORY}" + fi + done + # confirm + CONFIRM="" + echo -n "You realy want to remove '$@'? [y/n] "; read -k1 CONFIRM; echo + [[ ! $CONFIRM =~ [yY] ]] && return 1 + # move + for FILE in "$@"; do + DESTFILE="$(basename ${FILE})" + SUFFIX=''; + ITER=0; + while [ -e "${TRASHFILE}/${DESTFILE}${SUFFIX}" ]; do + SUFFIX="_${ITER}"; + ITER=$(expr ${ITER} + 1) + done + echo "Remove '${FILE}'" + mv "${FILE}" "${TRASHFILE}/${DESTFILE}${SUFFIX}" + echo "[Trash Info]\nPath=$(realpath ${FILE})\nDeletionDate=$(date +%Y-%m-%dT%H:%M:%S)" > "${TRASHINFO}/${DESTFILE}${SUFFIX}.trashinfo" + done +} +{% endhighlight %} +

Functions with automatic rehash after installing/removing packages are:

{% highlight bash %} pacman () { diff --git a/about.html b/about.html index a74365b..ff90ddc 100644 --- a/about.html +++ b/about.html @@ -11,7 +11,7 @@ title: About me

{{ page.title }}

GitHub Profile
- TU Profile on archlinux.org
+ TU Profile on archlinux.org
Some of my publications
PGP signature: 0x31361F01

diff --git a/ru/_posts/2014-01-14-about-zshrc.html b/ru/_posts/2014-01-14-about-zshrc.html index f71f5c1..acfca42 100644 --- a/ru/_posts/2014-01-14-about-zshrc.html +++ b/ru/_posts/2014-01-14-about-zshrc.html @@ -267,8 +267,6 @@ alias du='show_which du && du -k --total --human-readable' # замена less и zless на vimpager alias less='vimpager' alias zless='vimpager' -# более интерактивный rm -alias rm='show_which rm && rm -I' {% endhighlight %}

ls аллиасы (смотри man ls):

@@ -424,6 +422,42 @@ su () { } {% endhighlight %} +

Функция, которая заменяет оригиналькую команду rm. Если Вы наберете rm, это будет эквивалентно перемещению в корзину, также, Вы можете легко восстановить удаленный файл:

+{% highlight bash %} +rm () { + # error check + [ $# -eq 0 ] && { echo "Files are not set!"; return 1 } + # set trash path + TRASHDIR="$HOME/.local/share/Trash" + TRASHFILE="${TRASHDIR}/files" + TRASHINFO="${TRASHDIR}/info" + for DIRECTORY in "${TRASHDIR}" "${TRASHFILE}" "${TRASHINFO}"; do + if [ -e "${DIRECTORY}" ]; then + [ -d "${DIRECTORY}" ] || { echo "'${DIRECTORY}' is a file"; return 1 } + else + mkdir -p -m755 "${DIRECTORY}" + fi + done + # confirm + CONFIRM="" + echo -n "You realy want to remove '$@'? [y/n] "; read -k1 CONFIRM; echo + [[ ! $CONFIRM =~ [yY] ]] && return 1 + # move + for FILE in "$@"; do + DESTFILE="$(basename ${FILE})" + SUFFIX=''; + ITER=0; + while [ -e "${TRASHFILE}/${DESTFILE}${SUFFIX}" ]; do + SUFFIX="_${ITER}"; + ITER=$(expr ${ITER} + 1) + done + echo "Remove '${FILE}'" + mv "${FILE}" "${TRASHFILE}/${DESTFILE}${SUFFIX}" + echo "[Trash Info]\nPath=$(realpath ${FILE})\nDeletionDate=$(date +%Y-%m-%dT%H:%M:%S)" > "${TRASHINFO}/${DESTFILE}${SUFFIX}.trashinfo" + done +} +{% endhighlight %} +

Функция для автоматических обновлений путей после установки пакето:

{% highlight bash %} pacman () { diff --git a/ru/about.html b/ru/about.html index 41f743b..12e595f 100644 --- a/ru/about.html +++ b/ru/about.html @@ -12,7 +12,7 @@ title: Обо мне

{{ page.title }}

Профиль на GitHub
- Профиль TU на archlinux.org
+ Профиль TU на archlinux.org
Некоторые из моих публикаций
PGP: 0x31361F01