#!/bin/bash # ===== Couleurs ===== C_RESET="\e[0m" C_DIR="\e[34m" # Dossiers C_FILE="\e[32m" # Fichiers C_ARCH="\e[35m" # Archives C_SCRIPT="\e[33m" # Scripts .sh .py .pl C_IMG="\e[36m" # Images C_VIDEO="\e[31m" # Vidéos C_AUDIO="\e[95m" # Musique C_HEAD="\e[96m" # En-têtes C_SIZE="\e[90m" # Gris fade pour la taille directory="${1:-.}" display_dir=$(realpath "$directory") # ===== Vérifications ===== if [ ! -d "$directory" ]; then echo -e "\e[31m❌ Erreur : dossier introuvable : $directory${C_RESET}" exit 1 fi echo -e "${C_HEAD}📁${C_RESET} Listing du dossier :${C_HEAD} $display_dir${C_RESET}" echo -e "${C_FILE}📦${C_RESET} Taille totale :${C_FILE} $(du -sh "$directory" | awk '{print $1}')${C_RESET}" echo # ===== En-têtes (sans LINKS) ===== printf "%-6s %-11s %-12s %-12s %-8s %-17s %s\n" \ "TYPE" "PERMISSIONS" "OWNER" "GROUP" "SIZE" "DATE" "NAME" # ===== Fonction type et couleur ===== get_type_color() { local f="$1" if [ -d "$f" ]; then echo "📁 ${C_DIR}" elif [[ "$f" =~ \.(zip|tar|gz|bz2|xz|rar|7z)$ ]]; then echo "📚 ${C_ARCH}" elif [[ "$f" =~ \.(sh|py|pl|rb)$ ]]; then echo "🔧 ${C_SCRIPT}" elif [[ "$f" =~ \.(jpg|jpeg|png|gif|webp)$ ]]; then echo "🖼️ ${C_IMG}" elif [[ "$f" =~ \.(mp4|avi|mkv|mov)$ ]]; then echo "🎞️ ${C_VIDEO}" elif [[ "$f" =~ \.(mp3|wav|ogg|flac)$ ]]; then echo "🎵 ${C_AUDIO}" else echo "📄 ${C_FILE}" fi } # ===== Listing ===== ls -A "$directory" | while read entry; do path="$directory/$entry" type_color=$(get_type_color "$entry") emoji=$(echo "$type_color" | awk '{print $1}') color=$(echo "$type_color" | awk '{print $2}') perms=$(stat -c "%A" "$path") owner=$(stat -c "%U" "$path") group=$(stat -c "%G" "$path") size_raw=$(du -sh "$path" 2>/dev/null | awk '{print $1}') date=$(stat -c "%y" "$path" | cut -d':' -f1,2) # Retire les secondes (HH:MM) printf "%b%-6s%b %-11s %-12s %-12s %b%-8s%b %-17s %b%s%b\n" \ "$color" "$emoji" "$C_RESET" \ "$perms" "$owner" "$group" \ "$C_SIZE" "$size_raw" "$C_RESET" \ "$date" \ "$color" "$entry" "$C_RESET" done echo exit 0