From f13ed190e558f98db0545b47844ab597a498d164 Mon Sep 17 00:00:00 2001 From: Ali <80436167+4Pulcher@users.noreply.github.com> Date: Tue, 11 Nov 2025 00:08:27 +0100 Subject: [PATCH] Updated: with colors Improved readability on output... --- Sort.sh | 274 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 232 insertions(+), 42 deletions(-) diff --git a/Sort.sh b/Sort.sh index 3b703a2..324e148 100644 --- a/Sort.sh +++ b/Sort.sh @@ -85,9 +85,23 @@ function Draw_Line { declare -a Total declare -a Counter +declare -a DirName + +CLEAR='\033[0J' +RESET='\033[0m' + +RED='\033[1;31m' +GREEN='\033[1;32m' +YELLOW='\033[1;33m' +BLUE='\033[1;34m' +MAGANTA='\033[1;35m' + +RED_YELLOW='\033[41;33m' function Sort { + ((Current++)) + Total[$Current]=$# Counter[$Current]=0 @@ -155,228 +169,400 @@ function Sort { ;; *) ((Counter[$Current]++)) - printf "COUNTER" - for (( N=1 ; N <= $Current ; N++ )) ; do printf " ~ [$N]=${Counter[$N]}/${Total[$N]}" ; done - printf "\n" - if [ -d "$Item" ] ; then - Draw_Line ">---<" - echo "DIR: $Item" + local File="$Item" + + while [ "${File:0-1}" = "/" ] ; do File=${File%/} ; done + + if [ -d "$File" ] ; then + + ### DIRECTORIES ### + + DirName[$Current]=${File##*/} + if [ "$Recursive" = "yes" ] ; then - Sort "$Item"/* + + Sort "$File"/* + + if [ "${Mode,,}" = "move" ] ; then + + printf "$RED\nCLEAN:$RESET %s\n" $(rmdir -v "$File") + + fi + else + echo "DIR: Skipping!" + fi - elif [ -f "$Item" ] ; then - echo "FILE: $Item" - # VARIABLES: - local MIME=$(Get_MIME "$Item") + elif [ -f "$File" ] ; then + + ### FILES ### + + ### HEADER + + for (( N=1 ; $N < $Current ; N++ )) ; do + + tput cup "$(( $N * 2 - 2 ))" "0" + + printf "$CLEAR\n$GREEN-DIR:$RESET Level:$N => Total:${Total[$N]} / Current:${Counter[$N]} ~ ${DirName[$N]##*/}\n" + + done + + ### PROCESSES ### + + printf "$CLEAR\n$GREEN-FILE:$RESET Level:$Current => Total:${Total[$Current]} / Current:${Counter[$Current]}\n$GREEN-MANE:$YELLOW $File$RESET\n" + + ### PRE-TEST ### + + local MIME=$(Get_MIME "$File") + local MIMEMain=${MIME%/*} + local MIMESub=${MIME#*/} - echo "MIME: ${MIME^^}" + + printf "\n$YELLOW-MIME:$RESET %s\n" ${MIME^^} if [ "$Type" = "" ] || [ "${Type,,}" = "${MIMEMain,,}" ] || [ "${Type,,}" = "${MIMESub,,}" ] ; then - # PROBE: - local File="$Item" + ### PROBE ### + if [ "${Probe,,}" = "yes" ] ; then + local OLD=$(Get_SHA256Sum "$Item") - echo "PROBE: $(mkdir -v -p "PROBE")" + + printf "$YELLOW\n-PROBE:$RESET %s\n" $(mkdir -v -p "PROBE") + if [ "${Mode,,}" = "copy" ] || [ "${Mode,,}" = "move" ] ; then + local NEW="" - echo "PROBE: $(while [ "$OLD" != "$NEW" ] ; do cp -v -f "$Item" "PROBE/${Item##*/}" ; NEW=$(Get_SHA256Sum "PROBE/${Item##*/}") ; done)" - if [ "${Mode,,}" = "move" ] ; then echo "PROBE: $(rm -v -f "$Item")" ; fi + + printf "$RED\nP-ROBE:$RESET %s\n" $(while [ "$OLD" != "$NEW" ] ; do cp -v -f "$Item" "PROBE/${Item##*/}" ; NEW=$(Get_SHA256Sum "PROBE/${Item##*/}") ; done) + + if [ "${Mode,,}" = "move" ] ; then + + printf "$RED\n-PROBE:$RESET %s\n" $(rm -v -f "$Item") + + fi + File="PROBE/${File##*/}" + fi + fi - #NAMES + ### VARIABLES ### + + ### NAMES + local Name=$(Get_File_Name "$File") + if [ "$Rename" != "" ] ; then + case "${Rename,,}" in + "original") ;; + "mime") Name=$(printf $MIME | tr '/' '.') ;; + "mime-main") Name=$MIMEMain ;; + "mime-sub") Name=$MIMESub ;; + "sha256sum") Name=$(Get_SHA256Sum "$File") ;; + "random") Name=$RANDOM$RANDOM$RANDOM$RANDOM ;; + *) Name=$Rename ;; + esac + fi - echo "NAME: $Name" - #EXTENSIONS + printf "$YELLOW\n-NAME:$RESET %s\n" $Name + + ### EXTENSIONS + local Ext=$(Get_File_Extension "$File") + if [ "$Extension" != "" ] ; then + case "${Extension,,}" in + "original") ;; + "mime") Ext=$(printf $MIME | tr '/' '.') ;; + "mime-main") Ext=$MIMEMain ;; + "mime-sub") Ext=$MIMESub ;; + "random") Ext=$RANDOM ;; + *) Ext=$Extension ;; + esac + fi - echo "EXTENSION: $Ext" - #DIRECTORIES + printf "$YELLOW\n-EXTENSION:$RESET %s\n" $Ext + + ### DIRECTORIES + local Dir="" + if [ "$Dirs" != "" ] ; then + case "${Dirs,,}" in + "extension") if [ "$Ext" = "" ] ; then Dir=$(Get_File_Extension "$File") ; else Dir=${Ext^^} ; fi ;; + "mime") Dir=${MIME^^} ;; + "mime-main") Dir=${MIMEMain^^} ;; + "mime-sub") Dir=${MIMESub^^} ;; + "random") Dir=$RANDOM$RANDOM ;; + *) Dir="$Dirs" ;; + esac + fi - echo "DIRECTORY: $Dir" - #SUB-DIRECTIRIES + printf "$YELLOW\n-DIRECTORY:$RESET %s\n" $Dir + + ### SUB-DIRECTIRIES + local SubDir="" + if [ "$SubDirs" != "" ] ; then + case "${MIMEMain,,}" in + "image"|"video") + local WxH="0x0" + if [ ${MIMEMain,,} = "image" ] ; then WxH=$(Get_Image_WxH "$File") ; fi + if [ ${MIMEMain,,} = "video" ] ; then WxH=$(Get_Video_WxH "$File") ; fi - echo "WIDTH x HEIGHT: $WxH" + + printf "$YELLOW\n-IMAGE (WIDTH x HEIGHT):$RESET %s\n" $WxH + local FileFormat=$(Get_File_WxH_Format "$WxH") + case "${SubDirs,,}" in + "size") + SubDir="$WxH" ;; + "size+format") + SubDir="$FileFormat/$WxH" ;; + "format") + SubDir="$FileFormat" ;; + "format+size") + SubDir="$FileFormat/$WxH" ;; + "random") + SubDir=$RANDOM$RANDOM ;; + *) + SubDir="$SubDirs" ;; + esac + ;; + *) + local FileSize=$(Get_File_Size "$File") + case "${SubDirs,,}" in + "size") + local Format=("B" "KB" "MB" "GB" "TB" "PB" "EB" "ZB" "YB" "RB" "QB") + local Tmp=$FileSize ; N=0 ; while [ "$Tmp" -gt "999" ] ; do ((N++)) ; Tmp=$(( $Tmp / 1000 )) ; done + SubDir="$Tmp${Format[$N]}" ;; + "size+format") + local Format=("B" "KiB" "MiB" "GiB" "TiB" "PiB" "EiB" "ZiB" "YiB" "RiB" "QiB") + local Tmp=$FileSize ; N=0 ; while [ "$Tmp" -gt "1023" ] ; do ((N++)) ; Tmp=$(( $Tmp / 1024 )) ; done + SubDir="$Tmp_${Format[$N]}" ;; + "format") + local Format=("Byte" "KiloByte" "MegaByte" "GigaByte" "TerraByte" "PetaByte" "ExaByte" "ZettaByte" "YottaByte" "RonnaByte" "QuettaByte") + local Tmp=$FileSize ; N=0 ; while [ "$Tmp" -gt "999" ] ; do ((N++)) ; Tmp=$(( $Tmp / 1000 )) ; done + SubDir="${Format[$N]}" ;; + "format+size") + local Format=("Byte" "KiloByte" "MegaByte" "GigaByte" "TerraByte" "PetaByte" "ExaByte" "ZettaByte" "YottaByte" "RonnaByte" "QuettaByte") + local Tmp=$FileSize ; N=0 ; while [ "$Tmp" -gt "999" ] ; do ((N++)) ; Tmp=$(( $Tmp / 1000 )) ; done + SubDir="${Format[$N]}/$Tmp" ;; + "random") + SubDir=$RANDOM$RANDOM ;; + *) + SubDir="$SubDirs" ;; + esac ;; + esac + fi - echo "SUB-DIRECTORY: $SubDir" - # ACTIONS + printf "$YELLOW\n-SUB-DIRECTORY:$RESET %s\n" $SubDir + + ### ACTIONS ### + + ### PRE-ACTION - #PRE-ACTION local Location="./" + if [ "$Dir" != "" ] && [ "$SubDir" != "" ] ; then + Location="${Dir^^}/${SubDir^^}" + elif [ "$Dir" != "" ] ; then + Location="${Dir^^}" + elif [ "$SubDir" != "" ] ; then + Location="${SubDir^^}" + fi local NewName="$Name.$Ext" + if [ "$Replace" != "yes" ] ; then C=0 ; while [ -e "$Location/$NewName" ] ; do ((C++)) ; NewName="$Name-($C).$Ext" ; done ; fi - #ACTION + ### ACTION + if [ "${Probe,,}" = "yes" ] || [ "${Mode,,}" = "move" ] ; then - echo "MKDIR: $( mkdir -v -p "$Location" )" - echo "MOVE: $( mv -v -f "$File" "$Location/$NewName" )" + + printf "$BLUE\n--MKDIR:$RESET %s\n" $( mkdir -v -p "$Location" ) + + printf "$BLUE\n--MOVE:$RESET %s\n" $( mv -v -f "$File" "$Location/$NewName" ) elif [ "${Mode,,}" = "copy" ] ; then - echo "MKDIR: $( mkdir -v -p "$Location" )" - echo "COPY: $( cp -v -f "$File" "$Location/$NewName" )" + + printf "$YELLOW\n--MKDIR:$RESET %s\n" $( mkdir -v -p "$Location" ) + + printf "$BLUE\n--COPY:$RESET %s\n" $( cp -v -f "$File" "$Location/$NewName" ) elif [ "${Mode,,}" = "remove" ] ; then - echo "REMOVE: $( if [ -e "$Location/$NewName" ] ; then rm -v -f "$Location/$NewName" ; else echo "($Location/$NewName) No such file!" ; fi )" + + printf "$BLUE\n--REMOVE:$RESET %s\n" $( if [ -e "$Location/$NewName" ] ; then rm -v -f "$Location/$NewName" ; else echo "($Location/$NewName) No such file!" ; fi ) else - echo "DUMMY: $File --> $Location/$NewName" + + printf "$BLUE\n--DUMMY:$RESET %s --> %s/%s\n" $File $Location $NewName + fi - # PAUSE - if [ "$Pause" != "" ] ; then echo "PAUSE: $Pause" ; sleep $Pause ; fi else - echo "SKIP: MIME type does not match!" + + ### MISSMATCH ### + + printf "$MAGANTA\n--SKIP:$RESET MIME type does not match! (%s)\n" $MIME + fi - Draw_Line "--+--" + else - echo "ERROR: Unknown file type (\'$Item\')" + + ### UNKNOWN ### + + printf "$RED_YELLOW\n--ERROR:$RESET Unknown file type (\'%s\')\n" $Item + fi + + ### PAUSE ### + + if [ "$Pause" != "" ] ; then + + printf "$YELLOW\n-PAUSE:$RESET %s\n" $Pause + + sleep $Pause + + fi + ;; + esac done @@ -385,15 +571,18 @@ function Sort { } if [ $# -gt 0 ] ; then + OIFS=$IFS IFS=$'\n\b' Sort $@ IFS=$IOFS + else - cat << EOF -Sort.sh + +cat << EOF +${0##*/} by Ali_ISIN Version: 2.0 @@ -439,4 +628,5 @@ Sort.sh [--Probe] [--Type=(0)] [--Copy|--Move|--Remove] [--Recursive] [--Replace List: List of directories or files! EOF + fi