From c31e3c99b3f7ef5ecdeb18da05310d7f987f3b70 Mon Sep 17 00:00:00 2001 From: Ville Rantanen Date: Thu, 21 Jul 2016 10:01:35 +0300 Subject: [PATCH] rm with progress indicators --- bin/{rm_bg => rm-bg} | 0 bin/rm-progress | 1 + files/rm-progress | 72 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) rename bin/{rm_bg => rm-bg} (100%) create mode 120000 bin/rm-progress create mode 100755 files/rm-progress diff --git a/bin/rm_bg b/bin/rm-bg similarity index 100% rename from bin/rm_bg rename to bin/rm-bg diff --git a/bin/rm-progress b/bin/rm-progress new file mode 120000 index 0000000..5f3c3e5 --- /dev/null +++ b/bin/rm-progress @@ -0,0 +1 @@ +../files/rm-progress \ No newline at end of file diff --git a/files/rm-progress b/files/rm-progress new file mode 100755 index 0000000..48a82a6 --- /dev/null +++ b/files/rm-progress @@ -0,0 +1,72 @@ +#!/bin/bash + +set -e +function helpexit() { + echo Delete files with a progress bar. + echo This command is always recursive to folders! + echo '-f to force' + exit +} + +FORCE=0 +FOLDERS=( ) +for ((i=1; i<=${#@}; i++)) { + [[ "${!i}" = "-h" ]] && helpexit + [[ "${!i}" = "--help" ]] && helpexit + [[ "${!i}" = "-f" ]] && { FORCE=1; RMFORCE="-f"; continue; } + [[ "${!i}" = "-"* ]] && helpexit + FOLDERS+=( "${!i%/}" ) +} +[[ "${#FOLDERS[@]}" -eq 0 ]] && helpexit + +function listfiles() { + while IFS= read -r -d $'\0' line; do + files=$((files+1)) + printf "\r%02d:%02d:%02d %d" $(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60)) $files + done < <(find "$@" \( -type f -or -type l \) -print0) + printf "\r" +} +function deletefiles() { + i=0 + while IFS= read -r -d $'\0' line; do + i=$((i+1)) + percent=$((200*$i/$files % 2 + 100*$i/$files)) + printf "\r%02d:%02d:%02d %6d/%d %3d%% %s\033[0K" \ + $(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60)) $i $files $percent "$line" + rm "$line" + done < <(find "$@" \( -type f -or -type l \) -print0) + printf "\n" +} +function listfolders() { + while IFS= read -r -d $'\0' line; do + folders=$((folders+1)) + printf "\r%s %02d:%02d:%02d" $(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60)) $folders + done < <(find "$@" -type d -print0) + printf "\r" +} +function deletefolders() { + i=0 + while IFS= read -r -d $'\0' line; do + i=$((i+1)) + percent=$((200*$i/$folders % 2 + 100*$i/$folders)) + printf "\r%02d:%02d:%02d %6d/%d %3d%% %s\033[0K" \ + $(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60)) $i $folders $percent "$line" + rmdir "$line" + done < <(find "$@" -depth -type d -print0) + printf "\n" +} +echo Listing files... +files=0 +folders=0 +listfiles "${FOLDERS[@]}" +echo Prepared to delete $files files + +if [[ $FORCE -eq 0 ]]; then + echo ' to quit' + read foo +fi +deletefiles "${FOLDERS[@]}" +listfolders "${FOLDERS[@]}" +echo Removing remaining $folders folders +deletefolders "${FOLDERS[@]}" +