Здравейте! Вероятно използвате блокиращ рекламите софтуер. В това няма нищо нередно, много хора го правят.

     Но за да помогнете този сайт да съществува и за да имате достъп до цялото съдържание, моля, изключете блокирането на рекламите.

  Ако не знаете как, кликнете тук

Моите скриптове

feed Всичко свързано с Линукс. Новини, проблеми, въпроси.
Десктоп Линукс дистибуции, сървърни Линукс дистрибуции, Линукс дистрибуции с общо предназначение, Linux Mint, Ubuntu, Arch Linux, Mandriva, PCLinuxOS, openSUSE, Fedora, Red Hat Enterprise Linux, CentOS, Suse Linux Enterprise Server, Debian, Cross Linux from Scratch, Slackware, Gentoo. Графични среди, новини, игри, драйвъри, въпроси, десктоп, сървър, браузъри, помощ.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Моите скриптове

Мнение от Валсо »

За да не пускам отделни теми, реших да ги обединя в една. Който ги знае, прескача. Който не - копира и ползва. Почвам с двата, които пуснах вчера в отделни теми.

Написах си скриптче за броене на символи в името на файлове. Е, трябваше ми 1 час да го направя да работи както трябва, но в крайна сметка го направих. :mrgreen:
Реших, че може да му е полезно на някого. Вместо да копираш имената файл по файл и да ги пействаш в някой онлайн брояч, за половин секунда ти изкарва броя символи в имената на всички файлове в директорията. А пък ако в момента си някъде в средата на нищото и интернетът е мистерия, а ти трябва да броиш символи поради каквато и да е причина, скриптът влиза идеално.

• Скриптът:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

for name in *;
do
    # Пропускаме директории
    [ -f "$name" ] || continue

    if [[ "$name" == *.* ]]; then
        newname="${name%.*}"  # премахва разширението
    else
        newname="$name"       # няма разширение, използваме цялото име
    fi

    echo "$newname" > "$HOME/.cli-temp/$newname.txt"
    count=$(awk '{print length}' "$HOME/.cli-temp/$newname.txt")
    echo "Файлът '$name' съдържа $count символа."
done

rm $HOME/.cli-temp/*.*
Добавих логика за файлове без разширение. Аз я започнах, а AI я коригира, защото бях объркал броя квадратни скоби. :lol:
Втора редакция: да не би някой да си помисли, че сме му променили файловете... :lol:

• Как се ползва?
Пействате горния код в празен файл, който запазвате като whatevername.sh и го правите изпълним. Може да го обвържете и с alias за по-лесно. Създавате директория $HOME/.cli-temp. После cd до директорията, където са файловете и рънвате скрипта/alias-а.

• Пример:

Код за потвърждение: Избери целия код

[rado@arch]: /C/TORRENTS>$ countf
Файлът '8.Mile.2002.WEB-DL.1080p.OM.mkv' съдържа 27 символа.
Файлът 'Danny.Collins.2015.1080p.BluRay.DTS.x264.HDAccess.mkv' съдържа 49 символа.
Файлът 'District.9.2009.1080p.BluRay.mkv' съдържа 28 символа.
Файлът 'Independence.Day.1996.1080p.BluRay.mkv' съдържа 34 символа.
Файлът 'Independence.Day.Resurgence_2016_BDRip 1080p.mkv' съдържа 44 символа.
Файлът 'Lowriders.2016.LIMITED.1080p.BluRay.x264-SAPHiRE.mkv' съдържа 48 символа.
======================================================================================

След горния скрипт, реших да си напиша такъв и за директории. Тия квадратни скоби пак ги обърках, така че ИИ само коригира броя на скобите. :lol: Още не мога да свикна кога са квадратни, кога са кръгли скоби и все ги обърквам.

Това поне е по-лесно, защото при директориите няма разширения. Ако е директория, ще покаже броя символи, независимо колко точки и запетаи има в името ѝ.

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

for name in *;
do
    # Пропуска файлове, взема само директориите
    [ -d "$name" ] || continue

    dirname="$name"
    count=${#dirname}

    echo "Директорията '$dirname' съдържа $count символа."
done
Първоначално се опитах да го направя с команда директно в терминала, но ако в името на файла има скоби или други специални символи, задачата се чупи и затова със скрипт беше единственият начин.
Последно промяна от Валсо на Пон Окт 27, 2025 07:12, променено общо 1 път.
Прочетено: 1011 пъти
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Архивиране на всичко в текущата директория.
Първоначално беше така:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

target=$(basename "$PWD")
7z a /B/123/"$1".7z "$PWD" -mx=0 -mmt=20
и като ръннеш скрипта, просто добавяш име на архива, без значение как се казва текущата директория.
Архивът се създава с нулева комппресия в предварително зададена директория, както се вижда, която можете да си промените. Ако оставите да е само -mx, ще архивира с максимална компресия.
Колкото до тредовете, моят процесор е с 20 треда и ги задавам ръчно, защото p7zip не винаги ги отчита правилно и понякога половината бездействат. И тях можете да си смените, ако знаете колко треда има вашият процесор.

После обаче ми хрумна за някои частни случаи, в които искаш да архивираш всичко с изключение на дадена директория или даден файл. За това вече трябваше да питам AI и така скриптът стана:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

# Име на архива
archive_name="$1"

# Проверка за "except"
if [[ "$2" == "except" && -n "$3" ]]; then
    exclude="$3"
    echo "Изключваме '$exclude' от архива."
    7z a "/B/123/${archive_name}.7z" "$PWD" -xr!"$exclude" -mx=0 -mmt=20
else
    7z a "/B/123/${archive_name}.7z" "$PWD" -mx=0 -mmt=20
fi
Употреба: cd до $PWD (или F4 в някои файлови мениджъри),

Код за потвърждение: Избери целия код

$ ./this-script.sh myname
Ако искате да игнорира дадена директория или файл (засега е само за една директория или файл):

Код за потвърждение: Избери целия код

$ ./this-script.sh myname except dirname1
или

Код за потвърждение: Избери целия код

$ ./this-script.sh myname except filename.extension
Ако директорията или файлът за игнориране има интервали: except "dir name 1" или except "file name 1.extension".

И, да, знам, че може с някои графични архиватори, но някои отказват да архивират дадена директория, ако в нея има символни връзки (новият ролинг 7zip, който замества p7zip отказва да архивира, ако има символни връзки; 7zip за Windows също отказва по същата причина), затова предпочитам със скрипт. Да не говорим, че в зависимост от размера на $PWD със скрипт може да стане 5 до 10 пъти по-бързо, отколкото с GUI.

Тепърва ще го пробвам дали може да се пише повече от едно except. Бих могъл да питам AI, но предпочитам да се пробвам сам, след като той ми е дал насоката.
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Скрипт, с който пратих mkvtoolnix-gui по дяволите, защото ми писна от дебилното qt6 - ако версията дори с малко се различава, една програма работи, друга спира да работи: инсталираш flacon и mkvtoolnix-gui спира да работи! Такъв абсурд може да има само в QT! #-o И зат'ва си харесвам GTK3 - изискват се само пакетите GTK3, без значение от версията и всичко работи прекрасно!

А това е CLI - хем в пъти по-бързо от GUI по принцип, хем не зависи от framework! :mrgreen: :cool:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

for name in *.mkv; do
    newname=$(echo "$name" | rev | cut -f 2- -d '.' | rev)_new

    # Проверка дали има eng субтитри
    has_subs=$(ffprobe -v error -select_streams s \
        -show_entries stream=index:stream_tags=language \
        -of csv=p=0 "$name" | grep -E 'eng')

    if [ -n "$has_subs" ]; then
        # Има eng субтитри → включваме ги
        ffmpeg -i "$name" \
        -map 0:v \
        -map 0:a:m:language:eng \
        -map 0:s:m:language:eng \
        -c copy "$newname".mkv
    else
        # Няма eng субтитри → без тях
        ffmpeg -i "$name" \
        -map 0:v \
        -map 0:a:m:language:eng \
        -c copy "$newname".mkv
    fi
done
AI ми помогна за проверката дали има трак с английски субтитри, другото го извадих от man page за ffmpeg, както и модифицирах няколко примера от StuckExchange & StuckOverflow. Да, правилно прочетохте - написал съм STUCK. Ха, познайте защо... :lol:
По-нататък ще му добавя още един if вътре в if-а за тракове с етикет "original", но сега не ми се занимава. :p

mkvtoolnix-gui вече остава само за проверка, сравнения, тестове и поединична обработка на филми в mkv формат. За сериали - скрипта.

П.С. За 14 мин. обработи 9 епизода, при това намиращи се на хард диск, който като цяло е бавен... :evil4: :evil4:

П.С.2. По идея на ИИ го "разкрасихме" автоматично да обхожда всички директории в текущата, които съдържат думата "Season" (понеже аз обикновено ги преименувам на "Season 01" до "Season ∞") и автоматично извършва горната операция. Разкрасената версия изглежда така, но не съм я тествал. Би трябвало обаче да работи, съдейки по други скриптове, които имам и които изглеждат така и които, естествено, работят.

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

for dir in Season*; do
    if [ -d "$dir" ]; then
        echo "Обработвам директория: $dir"
        (
            cd "$dir" || exit

            for name in *.mkv; do
                newname=$(echo "$name" | rev | cut -f 2- -d '.' | rev)_new

                # Проверка дали има eng субтитри
                has_subs=$(ffprobe -v error -select_streams s \
                    -show_entries stream=index:stream_tags=language \
                    -of csv=p=0 "$name" | grep -E 'eng')

                if [ -n "$has_subs" ]; then
                    ffmpeg -i "$name" \
                    -map 0:v \
                    -map 0:a:m:language:eng \
                    -map 0:s:m:language:eng \
                    -c copy "$newname".mkv
                else
                    ffmpeg -i "$name" \
                    -map 0:v \
                    -map 0:a:m:language:eng \
                    -c copy "$newname".mkv
                fi
            done
        )
    fi
done
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Почти няма по-голям кеф (освен разможаването, де) да пишеш скриптове и общо взето (с малки изключения) можеш да правиш каквото си искаш. 11 отделни .sh скрипта се събраха в един удобен:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash
set -euo pipefail

case "$1" in
    30|35|40|45|50|55|60|65|70|75|80)
        sudo nvidia-settings -a "[gpu:0]/GPUFanControlState=1" 
        sudo nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=$1"
        ;;
    auto)
        sudo nvidia-settings -a "[gpu:0]/GPUFanControlState=0"
        ;;
    *)
        echo "Cases: auto, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80."
        ;;
esac
То има още много такива, де, някои са с по 15-20 кейса, но този е най-къс и подходящ за тук.
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Открих един хитър начин за броене на думи. То това не е скрипт, но не виждам къде другаде да го постна. Трябва ви само текстов редактор. Работи в pluma, но щом работи тук, би трябвало да работи в повечето текстови редактори.
Примерно, искаме да преброим в това изречение колко думи има. В случая съюзите също ги броим за думи:
"С clonezilla това може да стане, само ако си сигурен, че заетото пространство ще пасне и на двата".
Пействаме изречението в текстовия редактор, като махаме запетаите, защото ще ни пречат:

Код за потвърждение: Избери целия код

С clonezilla това може да стане само ако си сигурен че заетото пространство ще пасне и на двата
Натискаме CTRL+H в текстовия редактор, което ще отвори прозорец за търсене и замяна на текст. В първото поле натискаме единствено space, за да вкараме един интервал.
Във второто поле пишем само и единствено

Код за потвърждение: Избери целия код

\n
и натискате "замяна на всички", което автоматично ще трансформира списъка от думи по една на ред. И ако си включите опцията на текстовия редактор да показва номера на редове, така разбирате, че изречението съдържа 18 думи. :mrgreen:

Edit: същото работи и наобратно - \n го заменяме с интервал и думите моментално се връщат обратно на един ред с интервал между тях.

Реших да пробвам същото с

Код за потвърждение: Избери целия код

$ wine notepad
и... notepad.exe крашна. :toothy10:
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Генератор на case script.
Този генератор е писан за моята система. За да пасне за вашата, ще трябва да промените единствено променливата DEST= (първият ред от скрипта) да съвпадне с път за вашата система, където искате да отиде генераторът.

Код за потвърждение: Избери целия код

#!/usr/bin/env bash

DEST="/B/CLI/SCRIPTS"
COUNT="${1:-5}"   # Без аргумент създава файл с 5 кейса. Приема само цели числа.
OUTFILE="$DEST/example-$COUNT-case.sh"

if ! [[ "$COUNT" =~ ^[0-9]+$ ]]; then
    printf "Use integers only. Task terminated.\nUsage: './bash-case-generator.sh 18' will create example-18-case.sh in the destination.\n"
    exit 1
fi

{
cat <<HEADER
#!/usr/bin/env bash
set -euo pipefail

case "\$1" in
HEADER

for i in $(seq 1 "$COUNT"); do
    cat <<EOF
    option$i)
        echo "Тук идва кодът за option$i"
        ;;
EOF
done

cat <<FOOTER
    *)
        echo "Cases: ."
        ;;
esac
FOOTER
} > "$OUTFILE"

chmod +x "$OUTFILE"
echo "Създаден е $OUTFILE с $COUNT кейса."
С този генератор си обединих довчерашните кейсове в един огромен, като оставих само 3 извън огромния. Последният сега съдържа 85 кейса и от някогашните 286 алиаса и 240 скрипта ги намалих на:

Код за потвърждение: Избери целия код

$ count cli
Total number of aliases is: 139.
Total number of bash scripts in '/B/CLI/SCRIPTS' is: 95.
:mrgreen: :mrgreen:
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Кейсването продължава:

Код за потвърждение: Избери целия код

AUDIO-CASE.sh
AVN-CASE.sh
BACKUP-CASE.sh
CONVERT-CASE.sh
COUNT-CASE.sh
GAMES-CASE.sh
IMAGES-CASE.sh
NETWORK-CASE.sh
NVIDIA-CASE.sh
PACK-UNPACK-CASE.sh
SYSTEM-CASE.sh
Много по-удобно и по-лесно за помнене и писане, отколкото 200 отделни скрипта.

С AUDIO-CASE.sh пенсионирах няколко програми наведнъж. :lol:

Код за потвърждение: Избери целия код

#!/usr/bin/env bash
set -euo pipefail

case "$1" in
    640|576|512|448|384)
      for name in *.mka;
      do
        newname="${name%.mka}"
        ffmpeg -i "$name" -vn -ar 44100 -ac 3 -ab "$1"k -f ac3 "$newname".ac3
      done
    ;;
    normall)
        for name in *.wav;
        do
          normalize --gain=-0.1dB "$name"
        done
        ;;
  apewav|flacwav|m4awav|mkawav)
     shopt -s nullglob
     for name in *.ape *.flac *.m4a *.mka; do
        newname="${name%.*}"
        ffmpeg -i "$name" -vn -ar 44100 -ac 2 -ab 1411k -f wav "$newname".wav
     done
     shopt -u nullglob
    ;;
  wv)
    for name in *.wv; do
      newname="${name%.wv}"
      wvunpack "$name" -o "$newname.wav"
    done
    ;;
    rmin)
     shopt -s nullglob
     for name in *.ape *.flac *.m4a *.mka; do
        rm -v "$name"
     done
     shopt -s nullglob
        ;;
    *)
        echo "Bla!"
        ;;
esac

Код за потвърждение: Избери целия код

[rado@arch]: ~>$ count cli
Total number of aliases is: 70.
Total number of bash scripts in '/B/CLI/SCRIPTS' is: 58.
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Преди време си написах скрипт, сега кейс, който инсталира GOG & DLC-тата към играта. Но сега с малко помощ го модифицирах за тиха инсталация. Което върши идеална работа в новите версии на виното, където прозорецът непрекъснато се връща и винаги е "always on top" и няма отъ̀рване от него. @Mozo знае за какво говоря: https://forum.winehq.org/viewtopic.php?p=147310#p147310

Този кейс лесно може да се превърне в скрипт, просто премахвате стринговете gog) и ;; и готово - имате обикновен скрипт, който рънвате в основната директория на GOG играта. Примерно влизате в TORRENTS/Titan_Quest_2.10.6_(59562)_win_gog и там рънвате скрипта/кейса.
Аз лично си инсталирам всички игри в /B/GAMES, но вие ще трябва да си въведете вашата (фиксирана?) директория за игри, като НЕ махате двойните \\ - това е много важно, защото единичен слаш \ е за избягване на символи и интервали. С двоен слаш инсталаторът на GOG ще прочете "Z:\B\GAMES\$2".

Какво прави кейсът/скриптът:

рънва setup.exe-то за играта и я инсталира в $2, която трябва да напишете ръчно. "$2" означава user input. Аз примерно не искам дългата директория на Titan Quest и затова си я пиша сам: "TQ_AE". Но ако предпочитате да се инсталира в оригиналната директория, просто махнете $2 от пътя:

Код за потвърждение: Избери целия код

/DIR="Z:\\B\\GAMES\\"
Когато приключи с инсталацията, влиза в /DLC и пуска всички DLC екзета едно след друго, докато не инсталира и последното и после спира.

/VERYSILENT = не се появява прозорец.
/SP- = прескача въпроси от рода "Искате ли да започнете инсталацията?" и всякакви други подобни промптове. Като ги прескочи, директно пристъпва към инсталацията.
/SUPPRESSMSGBOXES = автоматично приема EULA-та, които всички GOG инсталатори изискват.

DLC-тата сами си намират къде е инсталирана играта, така че сами си се инсталират в зададената директория, от вас се иска просто да си чоплите в носа, докато приключи тихата инсталация в терминала. И няма досадни "always on top" прозорци, няма нищо! Супер удобно за версиите на wine от 10.7 нагоре, където този проблем все още не е оправен.

Код за потвърждение: Избери целия код

    gog)
        #runs the main setup EXE, then installs all DLCs
        wine *.exe  /VERYSILENT /SP- /SUPPRESSMSGBOXES /DIR="Z:\\B\\GAMES\\$2" && 
        cd DLC &&
        for name in *.exe; 
        do 
          wine "$name" /VERYSILENT /SP- /SUPPRESSMSGBOXES;
        done
        ;;
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Още един кейс скрипт - за архивиране на виното и то по такъв начин, че да не се чупят символните връзки в ~/.wine, а за всеки случай има и отделно архивче с тях.
Някой ден може да добавя кейс и за разархивиране и напълно възстановяване от архива, но сега ме мързи. :lol:

За да работи скриптът, трябва да има инсталиран

Код за потвърждение: Избери целия код

extra/7zip 25.01-1
или по-нова версия.

Код за потвърждение: Избери целия код

#!/usr/bin/env bash
set -euo pipefail

options0="-mx0 -mmt20"
options9="-mx9 -mmt20 -md=460m"
rsf="rsync --info=progress2"
rsd="rsync -r --info=progress2"
ssdwine="/BACKUP/WINE"
progswine="/B/PROGRAMS/GAMING/WINE/WINE-10.5"

case "$1" in
    links)
        7z a /home/rado/.wine/wine_symlinks-only.7z /home/rado/.wine/dosdevices -snl $options0
       #archives ~/.wine/dosdevices dir
        ;;
    backup)
        rm -v $progswine/dot-wine_10.5.7z && 
        rm -v $ssdwine/dot-wine_10.5.7z && 
        7z a $progswine/dot-wine_10.5.7z /home/rado/.wine -snl $options9 && 
        $rsf $progswine/dot-wine_10.5.7z $ssdwine
        ;;
    *)
        echo "Cases: links, backup. Run links only if ~/.wine doesn't contain wine_symlinks-only.7z, followed by backup."
        ;;
esac
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Питах AI да ми даде проверка дали дадена команда съществува и ако я няма, да изпълни някакво действие. И след малко доизкусуряване, вече имам насипно конвертиране на изображения - почти всичко към почти всичко, предимно към PNG. А и откакто гномаджиите прее*аха gdk-pixbuf2 да използва glycerin, редактирането на JPG вече е кошмар и още повече се налага всичко що ми е JPEG да го обърна на PNG.

Код за потвърждение: Избери целия код

#!/usr/bin/env bash
set -euo pipefail

# Проверки дали командите съществуват

if ! command -v cwebp >/dev/null 2>&1; then
echo "Командата cwebp не е налична. Инсталирам libwebp-utils..."
sudo pacman -S libwebp-utils
fi

if ! command -v dcmj2pnm >/dev/null 2>&1; then
echo "Командата dcmj2pnm не е налична. Инсталирам dcmtk..."
sudo pacman -S dcmtk
fi

if ! command -v rsvg-convert >/dev/null 2>&1; then
echo "Командата rsvg-convert не е налична. Инсталирам librsvg..."
sudo pacman -S librsvg
fi

case "$1" in
    dicompng)
        echo "If command/package not found: trizen -S dcmtk ."
        for name in *.dcm; 
        do 
          newname="${name%.dcm}"
          dcmj2pnm --write-png --min-max-window --verbose "$name" "$newname".png;
        done
        ;;
    dicomnoext)
        echo "If command/package not found: trizen -S dcmtk ."
        for name in *; 
        do 
          dcmj2pnm --write-png --min-max-window --verbose "$name" "$name".png;
        done
        ;;
    jpgpng)
        for name in *.jpg;
        do
          newname="${name%.jpg}"
          cwebp -q 85 "$name" -o "$newname".png;
        done
        ;;
    pngjpg)
        for name in *.png;
        do
          newname="${name%.png}"
          cwebp -q 100 "$name" -o "$newname".jpg;
        done
        ;;
    pngwebp)
        for name in *.png;
        do
          newname="${name%.png}"
          cwebp -q 100 "$name" -o "$newname".webp;
        done
        ;;
    webppng)
        for name in *.webp;
        do
          newname="${name%.webp}"
          cwebp -q 100 "$name" -o "$newname".png;
        done
        ;;
    svgpng)
        echo "If command not found: sudo pacman -S librsvg lib32-librsvg"
        for name in *.svg;
        do
          newname="${name%.svg}"
          rsvg-convert "$name" -o "$newname".png;
        done
        ;;
    height)
        echo "image height should be $(echo "($2/1.777777778)" | bc | awk '{printf "%.0f", $1}') px"
        ;;
    width)
        echo "image width should be $(echo "($2*1.777777778)" | bc | awk '{printf "%.0f", $1}') px"
        ;;
    icopng)
      shopt -s nullglob
      for name in *.ico;
      do
        newname="${name%.ico}"
        ffmpeg -i "$name" -map 0:v:0 "$newname".png
      done
      shopt -u nullglob
    ;;
    *)
        echo "Bla!"
        ;;
esac
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Едно скриптче за удобство - приспиване на системата след избран от вас брой минути. Ако сваляте нещо или компът изпълнява друга задача, която знаете кога ще свърши, но трябва да излизате, можете да му зададете кога да заспи или да се изключи. Аз лично само го приспивам.

Код за потвърждение: Избери целия код

        mins="$2"
        secs=$((mins * 60))
        echo "It's the final countdown: the system will go to sleep in $mins minutes."

        while [ $secs -gt 0 ]; do
            mm=$((secs / 60))
            ss=$((secs % 60))
            printf "\r%02d:%02d remaining..." $mm $ss
            sleep 1
            secs=$((secs - 1))
        done

        echo -e "Final countdown complete! System will sleep now."
        systemctl suspend
Визуално отброява наобратно, докато стигне нула, след това приспива системата:

Изображение
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Mozo
Skynet Cyber Unit
Skynet Cyber Unit
Мнения: 308737
Регистриран на: Пет Юни 01, 2007 14:18
Репутация: 388610
Местоположение: Somewhere In Time

Re: Моите скриптове

Мнение от Mozo »

Винаги съм ползвал това:

Изображение

И е пълно с опции:

Изображение

Има и гномски еквивалент.
Изображение
Аватар
бат-начо
Доктор
Доктор
Мнения: 5925
Регистриран на: Сря Фев 21, 2018 15:17
Репутация: 45644
пол: Мъж

Re: Моите скриптове

Мнение от бат-начо »

Mozo написа: Съб Фев 14, 2026 01:02 Има и гномски еквивалент.
Имаше е по-точно да се каже. Вероятно ще има някaви добавки, но като класическо инсталиране на пакет не се сещам да има вече.
Иначе да - qshutdown за планувано изключване, рестартиране, приспиване или хибернация. Но не е gtk.
Селски, Начо Селски.
Аватар
Валсо
Дарител
Дарител
Мнения: 13674
Регистриран на: Нед Мар 03, 2019 20:29
Репутация: 48327
пол: Мъж
Местоположение: ~/$USER
Обратна връзка:

Re: Моите скриптове

Мнение от Валсо »

Mozo написа: Съб Фев 14, 2026 01:02 Винаги съм ползвал това:
Това вероятно ще работи и в канелата, и в други десктопи, но аз предпочитам командния вариант, защото той не зависи от фреймуъркове и десктопи, съответно няма какво да му се счупи.
Освен това скрипта мога да го прекъсна, ако реша да се откажа от приспиването, докато на твоето не виждам никъде да има "отказ"/"прекратяване".
https://t.me/linuxtalkbg
Мързелът е двигател на прогреса.
Светът е shell, а хората в него са alias-и и скриптове.
Аватар
Mozo
Skynet Cyber Unit
Skynet Cyber Unit
Мнения: 308737
Регистриран на: Пет Юни 01, 2007 14:18
Репутация: 388610
Местоположение: Somewhere In Time

Re: Моите скриптове

Мнение от Mozo »

бат-начо написа: Съб Фев 14, 2026 09:03
Mozo написа: Съб Фев 14, 2026 01:02 Има и гномски еквивалент.
Имаше е по-точно да се каже. Вероятно ще има някaви добавки, но като класическо инсталиране на пакет не се сещам да има вече.
Иначе да - qshutdown за планувано изключване, рестартиране, приспиване или хибернация. Но не е gtk.
Напротив, има си го:

https://community.linuxmint.com/software/view/gshutdown
Валсо написа: Съб Фев 14, 2026 11:06
Mozo написа: Съб Фев 14, 2026 01:02 Винаги съм ползвал това:
Това вероятно ще работи и в канелата, и в други десктопи, но аз предпочитам командния вариант, защото той не зависи от фреймуъркове и десктопи, съответно няма какво да му се счупи.
Освен това скрипта мога да го прекъсна, ако реша да се откажа от приспиването, докато на твоето не виждам никъде да има "отказ"/"прекратяване".
По тази логика не ползвай въобще графична среда и щракай само команди, така няма да зависиш от нищо :roll:

Работи от години, работи винаги и никога не се е чупило. Да, можеш да го ползваш и на друг десктоп, но за Cinnamon си има гномски еквивалент:

https://community.linuxmint.com/software/view/gshutdown
Изображение
Нова тема Публикувай отговор

Обратно към “Линукс - инсталация, настройки, проблеми”