Не так уж и редко есть необходимость заменить пробелы в именах файлов на подчеркивание.
Развернуть blank-rename.sh
Развернуть blank-rename.sh
#!/bin/bash # # Скрипт blank-rename.sh # Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге. ONE=1 # единственное или множественное число (см. ниже). number=0 # Количество переименованных файлов. FOUND=0 # Код завершения в случае успеха. for filename in * # Перебор всех файлов в текущем каталоге. do echo "$filename" | grep -q " " # Проверить - содержит ли имя файла пробелы. if [ $? -eq $FOUND ] then fname=$filename # Удалить путь из имени файла. n=`echo $fname | sed -e "s/ /_/g"` # Заменить пробелы символом подчеркивания. mv "$fname" "$n" # Переименование... let "number += 1" fi done if [ "$number" -eq "$ONE" ] then echo "$number файл переименован." else echo "Переименовано файлов: $number" fi exit 0
Иногда требуется переконвертировать аудиофайлы из одного формата или битрейта в другой, в этом нам поможет утилита lame и этот незамысловатый скриптик…
Развернуть conv2mp3.sh
Развернуть conv2mp3.sh
#!/bin/bash ### Заменить flac на другой аудиформат, если есть необходимость, также заменить 320, если нужен другой битрейт. ### Скрипт конвертации аудиофайлов conv2mp3.sh cd ./ && mkdir ./conv for f in *.flac; do flac -cd "$f" | lame -b 320 - ./conv/"${f%.*}".mp3; done
Показывает информацию о текущем железе, занятых ресурсах и состоянии накопителей.
Развернуть sysfull_info.sh
Развернуть sysfull_info.sh
#!/bin/bash ### Скрипт вывода информации о unix-like системах ### Сделайте скрипт исполняемым: chmod a+x sysfull_info.sh # Цветовые коды ORANGE='\033[0;33m' YELLOW='\033[1;33m' RED='\033[1;31m' GREEN='\033[1;32m' WHITE='\033[1;37m' CIAN='\033[1;36m' MAGENTA='\033[1;35m' PINK='\033[38;5;199m' NC='\033[0m' section() { echo -e "${ORANGE}=== $1 ===${NC}" } # Проверка прав if [ "$EUID" -ne 0 ]; then echo -e "${RED}ВНИМАНИЕ:${NC} Для полной информации запустите скрипт с sudo" fi section "Информация о системе" echo "" CURRENT_DATE=$(date '+%Y-%m-%d %H:%M:%S') UPTIME=$(uptime -p) echo -e "${WHITE}Текущее время:${NC} ${CIAN}$CURRENT_DATE${NC}" echo -e "${WHITE}Аптайм:${NC} ${CIAN}$UPTIME${NC}" echo -e "${WHITE}Активные пользователи:${NC} ${CIAN}$(who | wc -l)${NC}" echo -e "${WHITE}Загрузка системы:${NC} ${CIAN}$(uptime | awk -F'load average: ' '{print $2}')${NC}" echo "" # Состояние основных компонентов CPU_NAME=$(cat /proc/cpuinfo | grep -i 'model name'| sed -n '1p' | awk '{print $4,$5,$7,$8}') CPU_TEMP=$(sensors | grep 'Package id 0' | awk '{print $4}' | sed 's/+//;s/\.0//') FAN_RPM=$(sensors | grep 'fan2' | awk '{print $2}') CPU_LOAD=$(top -bn1 | grep 'Cpu(s)' | awk '{printf "%.1f", $2 + $4}') MEM_INFO=$(free -m | awk '/Mem:/||/^Память:/ {print $3, $2}') MEM_USED=$(echo $MEM_INFO | awk '{print $1}') MEM_TOTAL=$(echo $MEM_INFO | awk '{print $2}') MEM_PERCENT=$((MEM_USED * 100 / MEM_TOTAL)) ZOMBIES=$(ps axo state | grep -c 'Z') echo -e " ┌─ ${WHITE}Процессор:${NC} ${CIAN}$CPU_NAME${NC}" echo -e " ├─ ${WHITE}Температура CPU:${NC} ${CIAN}$CPU_TEMP°C${NC}" echo -e " ├─ ${WHITE}Обороты кулера:${NC} ${CIAN}$FAN_RPM${NC} ${WHITE}RPM${NC}" echo -e " └─ ${WHITE}Загрузка CPU:${NC} ${CIAN}$CPU_LOAD%${NC}" echo "" echo -e " ┌─ ${WHITE}Использовано памяти:${NC} ${CIAN}$MEM_USED МБ${NC} ${WHITE}из${NC} ${CIAN}$MEM_TOTAL МБ${NC} ${WHITE}($MEM_PERCENT%)${NC}" echo -e " ├─ ${WHITE}Процессов всего:${NC} ${CIAN}$(ps -e | wc -l)${NC}" echo -e " ├─ ${WHITE}Зомби-процессы:${NC} ${RED}$ZOMBIES${NC}" if [ "$ZOMBIES" -gt 0 ]; then ps -eo pid,state,comm | awk '$2=="Z" {print $1, $3}' | while read -r pid comm; do echo -e " ${RED}└─${NC} ${PINK}$pid${NC} ${YELLOW}(${comm})${NC}" done fi echo "" #section "Состояние GPU" detect_gpu() { # NVIDIA if command -v nvidia-smi &> /dev/null; then GPU_NAME=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader 2>/dev/null | head -1) GPU_VRAM=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader 2>/dev/null | awk '{print $1}') GPU_TEMP=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader) echo -e " ┌─ ${WHITE}Видеокарта:${NC} ${CIAN}NVIDIA $GPU_NAME${NC}" echo -e " ├─ ${WHITE}Температура GPU:${NC} ${CIAN}$GPU_TEMP°C${NC}" echo -e " └─ ${WHITE}Утилизация VRAM:${NC} ${CIAN}$GPU_VRAM МБ${NC}" # AMD elif [ -d /sys/class/drm/card0/device ]; then GPU_NAME=$(cat /sys/class/drm/card0/device/gpu_bus_id 2>/dev/null) if [ -n "$GPU_NAME" ]; then GPU_TEMP=$(sensors | grep 'edge' | awk '{print $2}' | sed 's/+//;s/°C//') echo -e "${WHITE}Видеокарта:${NC} ${CIAN}AMD $GPU_NAME${NC}" echo -e "${WHITE}Температура GPU:${NC} ${CIAN}$GPU_TEMP°C${NC}" fi # Intel elif [ -d /sys/class/drm/card0 ]; then echo -e "${WHITE}Видеокарта:${NC} ${CIAN}Intel Integrated Graphics${NC}" else echo -e "${WHITE}Видеокарта:${NC} ${CIAN}Не обнаружена${NC}" fi } detect_gpu echo "" # Начало блока "Статус сервисов" services=("ssh" "smbd" "cups" "swapspace") for service in "${services[@]}"; do if systemctl is-active --quiet $service 2>/dev/null; then status="${GREEN}активен${NC}" else status="${RED}не активен${NC}" fi echo -e "${WHITE}$service:${NC} ${status}" done # Конец блока "Статус сервисов", если этот блок нужен, закомментируйте его echo "" # Доступные обновления if command -v apt &> /dev/null; then updates=$(apt list --upgradable 2>/dev/null | wc -l) if [ $updates -gt 1 ]; then echo -e "${WHITE}Доступно обновлений:${NC} ${CIAN}$((updates - 1))${NC}" else echo -e "${WHITE}Система обновлена${NC}" fi else echo -e "${WHITE}Информация недоступна (только apt-системы)${NC}" fi REBOOT_NEEDED=$(if [ -f /var/run/reboot-required ]; then echo "Да"; else echo "Нет"; fi) echo -e "${WHITE}Требуется перезагрузка:${NC} ${CIAN}$REBOOT_NEEDED${NC}" echo "" # Сетевой трафик NET_STATS=$(netstat -i | grep -E '^(ens|eth|enp)' | awk '{rx+=$3; tx+=$7} END {print rx, tx}') RX_MB=$(echo "scale=2; $(echo $NET_STATS | awk '{print $1}') / 1024" | bc) TX_MB=$(echo "scale=2; $(echo $NET_STATS | awk '{print $2}') / 1024" | bc) echo -e "${WHITE}Получено данных за сессию:${NC} ${CIAN}$RX_MB МБ${NC}" echo -e "${WHITE}Передано данных за сессию:${NC} ${CIAN}$TX_MB МБ${NC}" echo "" disk_info() { local device=$1 local device_name=${device##*/} local device_type local model local temp local health local errors="" local disk_size if [[ $device == *"nvme"* ]]; then device_type="NVMe SSD" model=$(nvme list | grep "$device" | awk '{for(i=3;i<=NF-5;i++) printf $i" "}' | sed 's/ *$//') temp=$(nvme smart-log $device | grep 'temperature' | awk '{print $3}') health=$(nvme smart-log $device | grep 'percentage_used' | awk '{print $3}') health="Износ: ${health}%" elif [[ $(cat /sys/block/${device_name}/queue/rotational) -eq 0 ]]; then device_type="SATA SSD" model=$(smartctl -i $device | awk -F': ' '/Device Model|Model Number/{print $2}' | head -1 | sed 's/ *$//') temp=$(smartctl -a $device | awk '/Temperature_Celsius/ {print $10}') health=$(smartctl -a $device | grep -m1 'overall-health' | awk '{print $NF}') else device_type="HDD" model=$(smartctl -i $device | awk -F': ' '/Device Model|Model Number/{print $2}' | head -1 | sed 's/ *$//') temp=$(smartctl -a $device | awk '/Temperature_Celsius/ {print $10}') # SMART-статус для HDD smart_status=$(smartctl -H $device | grep 'result' | awk '{print $NF}') if [[ "$smart_status" == "PASSED" ]]; then health="Хорошо" else # Проверка конкретных ID атрибутов critical_errors=$(smartctl -A $device | awk ' $1 == 1 && $10 > 0 { printf "Raw_Read_Error: %d ", $10 } $1 == 5 && $10 > 0 { printf "Reallocated_Sectors: %d ", $10 } $1 == 7 && $10 > 0 { printf "Seek_Error_Rate: %d ", $10 } $1 == 187 && $10 > 0 { printf "Reported_Uncorrect: %d ", $10 } $1 == 194 && $10 > 60 { printf "Temp: %d°C ", $10 } $1 == 196 && $10 > 0 { printf "Realloc_Event_Count: %d ", $10 } $1 == 197 && $10 > 0 { printf "Pending_Sectors: %d ", $10 } $1 == 198 && $10 > 0 { printf "Offline_Uncorrect: %d ", $10 } $1 == 199 && $10 > 0 { printf "UDMA_CRC_Errors: %d ", $10 } $1 == 200 && $10 > 0 { printf "Write_Error_Rate: %d ", $10 } ') health="Плохо" errors="$critical_errors" fi fi # Получаем размер диска disk_size=$(lsblk -bdno SIZE $device | numfmt --to=iec --format "%.2fB" | sed 's/,/./; s/ //g') # Вывод основной информации echo -e " ┌─ ${MAGENTA}[$device_type] ${model} ${device}: ${disk_size}${NC}" echo -e " ├─ Температура: ${CIAN}${temp}°C${NC}" echo -e " ├─ Состояние: ${CIAN}${health}${NC}" if [[ -n "$errors" ]]; then echo -e " ├─ Ошибки: ${RED}${errors}${NC}" fi # Получаем смонтированные разделы partitions=$(lsblk -lno NAME,SIZE,MOUNTPOINT $device | grep -v '^NAME' | awk '$3 != ""') if [[ -n "$partitions" ]]; then echo -e " └─ Точки монтирования:" # Выводим разделы counter=0 while IFS= read -r part; do part_name=$(echo "$part" | awk '{print $1}') part_size=$(echo "$part" | awk '{print $2}') part_mount=$(echo "$part" | awk '{print $3}') used=$(df -h /dev/$part_name 2>/dev/null | awk 'NR==2 {print $5}') [[ -z "$used" ]] && used="N/A" if [[ $counter -eq $(($(echo "$partitions" | wc -l)-1)) ]]; then symbol="└─" else symbol="├─" fi echo -e " ${symbol} ${CIAN}/dev/${part_name}:${NC} ${part_size} -> ${YELLOW}${part_mount}${NC} (${WHITE}${used}${NC})" ((counter++)) done <<< "$partitions" else echo -e " └─ ${YELLOW}Не смонтирован${NC}" fi echo "" } section "Состояние накопителей" echo "" { # Сначала NVMe lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep 'nvme' | awk '{print $1}' # Затем SSD (не NVMe) lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep -v 'nvme' | awk '$3 == 0 {print $1}' # Затем HDD lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep -v 'nvme' | awk '$3 == 1 {print $1}' } | while read -r disk; do disk_info "/dev/$disk" done exit