taille-dir.sh
· 2.2 KiB · Bash
原始檔案
#!/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
| 1 | #!/bin/bash |
| 2 | |
| 3 | # ===== Couleurs ===== |
| 4 | C_RESET="\e[0m" |
| 5 | C_DIR="\e[34m" # Dossiers |
| 6 | C_FILE="\e[32m" # Fichiers |
| 7 | C_ARCH="\e[35m" # Archives |
| 8 | C_SCRIPT="\e[33m" # Scripts .sh .py .pl |
| 9 | C_IMG="\e[36m" # Images |
| 10 | C_VIDEO="\e[31m" # Vidéos |
| 11 | C_AUDIO="\e[95m" # Musique |
| 12 | C_HEAD="\e[96m" # En-têtes |
| 13 | C_SIZE="\e[90m" # Gris fade pour la taille |
| 14 | |
| 15 | |
| 16 | directory="${1:-.}" |
| 17 | display_dir=$(realpath "$directory") |
| 18 | |
| 19 | # ===== Vérifications ===== |
| 20 | if [ ! -d "$directory" ]; then |
| 21 | echo -e "\e[31m❌ Erreur : dossier introuvable : $directory${C_RESET}" |
| 22 | exit 1 |
| 23 | fi |
| 24 | |
| 25 | echo -e "${C_HEAD}📁${C_RESET} Listing du dossier :${C_HEAD} $display_dir${C_RESET}" |
| 26 | echo -e "${C_FILE}📦${C_RESET} Taille totale :${C_FILE} $(du -sh "$directory" | awk '{print $1}')${C_RESET}" |
| 27 | echo |
| 28 | |
| 29 | # ===== En-têtes (sans LINKS) ===== |
| 30 | printf "%-6s %-11s %-12s %-12s %-8s %-17s %s\n" \ |
| 31 | "TYPE" "PERMISSIONS" "OWNER" "GROUP" "SIZE" "DATE" "NAME" |
| 32 | |
| 33 | # ===== Fonction type et couleur ===== |
| 34 | get_type_color() { |
| 35 | local f="$1" |
| 36 | |
| 37 | if [ -d "$f" ]; then echo "📁 ${C_DIR}" |
| 38 | elif [[ "$f" =~ \.(zip|tar|gz|bz2|xz|rar|7z)$ ]]; then echo "🗜️ ${C_ARCH}" |
| 39 | elif [[ "$f" =~ \.(sh|py|pl|rb)$ ]]; then echo "⚙️ ${C_SCRIPT}" |
| 40 | elif [[ "$f" =~ \.(jpg|jpeg|png|gif|webp)$ ]]; then echo "🖼️ ${C_IMG}" |
| 41 | elif [[ "$f" =~ \.(mp4|avi|mkv|mov)$ ]]; then echo "🎞️ ${C_VIDEO}" |
| 42 | elif [[ "$f" =~ \.(mp3|wav|ogg|flac)$ ]]; then echo "🎵 ${C_AUDIO}" |
| 43 | else echo "📄 ${C_FILE}" |
| 44 | fi |
| 45 | } |
| 46 | |
| 47 | # ===== Listing ===== |
| 48 | ls -A "$directory" | while read entry; do |
| 49 | path="$directory/$entry" |
| 50 | |
| 51 | type_color=$(get_type_color "$entry") |
| 52 | emoji=$(echo "$type_color" | awk '{print $1}') |
| 53 | color=$(echo "$type_color" | awk '{print $2}') |
| 54 | |
| 55 | perms=$(stat -c "%A" "$path") |
| 56 | owner=$(stat -c "%U" "$path") |
| 57 | group=$(stat -c "%G" "$path") |
| 58 | size_raw=$(du -sh "$path" 2>/dev/null | awk '{print $1}') |
| 59 | date=$(stat -c "%y" "$path" | cut -d':' -f1,2) # Retire les secondes (HH:MM) |
| 60 | |
| 61 | printf "%b%-6s%b %-11s %-12s %-12s %b%-8s%b %-17s %b%s%b\n" \ |
| 62 | "$color" "$emoji" "$C_RESET" \ |
| 63 | "$perms" "$owner" "$group" \ |
| 64 | "$C_SIZE" "$size_raw" "$C_RESET" \ |
| 65 | "$date" \ |
| 66 | "$color" "$entry" "$C_RESET" |
| 67 | |
| 68 | done |
| 69 | |
| 70 | echo |
| 71 | exit 0 |
| 72 |