41

Re: bash скрипти

Ґномівський скріншотер скидає всі файли в загальну папку Pictures, перетворюючи її на смітник.

Написав короткий скрипт, аби автоматично скидати всі скріншоти в окрему папку Pictures/Screenshots.

Ґіст

42

Re: bash скрипти

Створив невеликий шел-скрипт, який генерує sitemap.xml для статичного веб-сайту.

Зауваги радо приймаю.

Подякували: leofun011

43

Re: bash скрипти

Ще двійко шел-скриптів для статичного сайту:

Генерувати rss.xml
Генерувати шаблон html-сторінки

Подякували: leofun011

44 Востаннє редагувалося bebyk (12.09.2020 20:51:14)

Re: bash скрипти

Створив простий скрипт, щоб перевіряти погоду в терміналі.

github.com/bebyx/wtr

Запакував у .deb пакунок.

Дістати:

wget https://github.com/bebyx/wtr/blob/master/wtr_1.0_all.deb

45 Востаннє редагувалося dot (23.09.2020 16:25:14)

Re: bash скрипти

Ne duge tsjikavyj, ale moglyvo korysnyj.

Potcav dyvyty Amerykansjkoho «Ofis», tam vydyva buly jak mp4, a napysy v okremij tetsi. A vydyvohratc mpv tcomusj tak sobi tcy ne tak stjahuvav napysy, koly robec z dekiljkoma vydyvamy. Abo ja zatupyj. V budj-jakomu vypadku pobatcyv na dotsi, ge aby zastosuvaty pevni zminy do pevnoho vydyva, to treba prosto prostavjaty u megax --{ […] --}. Odrazu v holovi otrymav duge prostyj alqorytm, tog dlja sebe xutko nackrjabav.

Kod
#!/bin/bash

# my-mpv
# A script allows easy using multivideos and -subs at once

##### Default varitions

script=
videos=
subs=

##### Functions

help()
{
    echo "--videos [-vs] \"path-to-files\""
    echo "--subs [-ss] \"path-to-files\""
    echo "--help"
    echo
    echo "Example: -vs \"*.mp4\" -ss \"./Subs/*.srt\""
}

##### Main

# Vidsutnistj arqumentiv

if [[ $# -eq 0 ]] ; then
    help
    exit
fi

# Ohljad parametriv

while [ "$1" != "" ]; do
    case $1 in
        -vs | --videos )
            videos=$2
            shift
            ;;
        -ss | --subs )
            subs=$2
            shift
            ;;
        --help )
            help
            exit
            ;;
        * )
            script="${script} $1"
            ;;
    esac
    shift
done

# Sklej

for i in $(eval echo ${videos}); do
    script="${script} --{ $i --sub-file=${subs/\*/${i%.*}} --}"
done

# Zapusk

mpv ${script}

Zalyv i podaljci zminy, jakctco vynykne potrjiba, robyty jmu na qýsti na Qýthabi.

Obrav $(eval echo ${videos}), bo dozvoljaje obyraty pevni vydyva, a ne vsji, napryklad:

$ my-mpv -vs "%name%.S01E{07..22}*.mp4" -ss "./Sub/*.srt"

Skrypt zberjihaje nakazy do mpv, tomu to ne prosto okremyj skrypt pid pevnu zadatcu, a moga uvagyty za prosto malenjkoho patca.

46

Re: bash скрипти

Кожен, хто встановлював Linux from Scratch, доходив до цього розділу, де треба вивантажити сирці для майбутньої LFS-системи.

Звісно там є варіянт вивантажити все зразу з дзеркала LFS. Однак коли вчишся, такі шляхи видаються надто банальними.

Написав bash-скрипт, який парсить зазначену ж у першому абзаці html-сторінку, витягує посилання й вивантажує всі архіви wget'ом.

47

Re: bash скрипти

Знайшов отаке чудо, яке допомогло свого часу виявити обман

#!/bin/bash

prev_count=`cat ze.log | tail -1 | awk '{print $2}'`
time=`date '+%Y-%m-%d-%H-%M-%S'`
count=`curl https://ze2019.com/storage/counters.json?rand=0.8880051828185136 | grep "volunteer_amount" | sed 's/{"volunteer_amount"://' | sed 's/}/ /'`
let "inc = $count - $prev_count"
echo "$time $count $inc" >> ze.log

48

Re: bash скрипти

Скрипт автоматичного імпорту бд в проект із вказаного каталогу
використання:
bash import.sh project1 -d 123.123.123.123


#!/bin/sh
#domain - project name
#-d - drop and create db before import
#host - localhost

DOMAIN=$1
ACTION=$2
HOST=$3


USERNAME="user"
PASSWORD="pass"
BASE_DIR="/var/www/$DOMAIN/import/*"

if [ ! $HOST ]; then
    HOST='localhost'
fi


if [ "$ACTION" == "-d" ]; then
    mysqladmin -u $USERNAME -p$PASSWORD -h $HOST drop $DOMAIN
    mysqladmin -u $USERNAME -p$PASSWORD -h $HOST create $DOMAIN
    echo "drop database $DOMAIN"
    echo "create database $DOMAIN"
fi

for i in $BASE_DIR.sql
do
    mysql -u $USERNAME -p$PASSWORD -h $HOST $DOMAIN < "$i"
    echo "import database [$DOMAIN]"
done

for i in $BASE_DIR.sql.bz2
do
    bunzip2 < "$i" | mysql -u $USERNAME -p$PASSWORD -h $HOST $DOMAIN
    echo "import database [$DOMAIN]"
done

for i in $BASE_DIR.sql.gz
do
    zcat "$i" | mysql -u $USERNAME -p$PASSWORD -h $HOST $DOMAIN
    echo "import database [$DOMAIN]"
done
Подякували: 0xDADA11C7, bebyk2

49

Re: bash скрипти

Чистить Убунту, видаляє купу всього зайвого і старого. Запускайте на свій страх і ризик

#!/bin/sh

#Check the Drive Space Used by Cached Files
du -sh /var/cache/apt/archives

#Clean all the log file
#for logs in `find /var/log -type f`;  do > $logs; done

logs=`find /var/log -type f`
for i in $logs
do
> $i
done

#Getting rid of partial packages
apt-get clean && apt-get autoclean
apt-get remove --purge -y software-properties-common

#Getting rid of no longer required packages
apt-get autoremove -y


#Getting rid of orphaned packages
deborphan | xargs sudo apt-get -y remove --purge

#Free up space by clean out the cached packages
apt-get clean

# Remove the Trash
rm -rf /home/*/.local/share/Trash/*/**
rm -rf /root/.local/share/Trash/*/**

# Remove Man
rm -rf /usr/share/man/?? 
rm -rf /usr/share/man/??_*

#Delete all .gz and rotated file
find /var/log -type f -regex ".*\.gz$" | xargs rm -Rf
find /var/log -type f -regex ".*\.[0-9]$" | xargs rm -Rf

#Cleaning the old kernels
dpkg-query -l|grep linux-im*
#dpkg-query -l |grep linux-im*|awk '{print $2}'
apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) --assume-yes
apt-get install linux-headers-`uname -r|cut -d'-' -f3`-`uname -r|cut -d'-' -f4`

#Cleaning is completed
echo "Cleaning is completed"

50 Востаннє редагувалося frz (07.04.2022 15:47:21)

Re: bash скрипти

1. Команда перевіряє чи "живий" ssh тунель з портом 9521:

nc -z 127.0.0.1 9521 || echo "no tunnel open"

2. Команда створює ssh тунель з портом 9521:

ssh user1@example.com -D9521 -C -N -q

Розгадую ребус, як об'єднати (1) і (2), тобто створювати тунель лише тоді, коли він ще не існує.


----


Upd: поки що потестив такий варіант:

1) відкриваємо тунель під час чого створюється сокет-файл my-ctrl-socket

ssh -M -S my-ctrl-socket -fNT user1@example.com -D9521 -C

2) перевіряємо чи тунель створено успішно

ssh -S my-ctrl-socket -O check user1@example.com

якщо успішно - буде відповідь схожа на таку

Master running (pid=142033)

якщо неуспішно - буде відповідь схожа на таку

Control socket connect(my-ctrl-socket): No such file or directory

3) закриваємо тунель

ssh -S my-ctrl-socket -O exit user1@example.com

51

Re: bash скрипти

$ sudo ls /var/log/httpd/

access_log  access_log-20220522  error_log  error_log-20220522

Як грамотно видаляти лише access_log-20220522 і  error_log-20220522 якщо такі існують, враховуючи що дата в імені файлу може змінюватися?

access_log і error_log повинні залишатися на місці (не видалятися).

52

Re: bash скрипти

Найпростіше, склепав за кілька секунд на колінці :D
перевірено на FreeBSD  :)

 rm -rf *_log-*
Подякували: leofun011

53

Re: bash скрипти

Чомусь з великою пересторогою ставлюся до ключа -rf, спробую якось без нього...

54 Востаннє редагувалося Alexv (27.05.2022 10:37:57)

Re: bash скрипти

А дарма, нічого в цих ключах страшного
-r означає рекурсивне видалення, тобто без нього ви більше одного файлу не видалите за раз(без нього це не буде працювати)
-f просто каже програмі не запитувати підтвердження(можете не вказувати, але кожний файл треба підтверджувати, що ви його хочете видалити)
https://man7.org/linux/man-pages/man1/rm.1.html
UPD Якщо боїтесь, спочатку спробуйте на піддослідній теці, наприклад зробіть копію, або просто створіть теку і в ній кілька файлів)

Подякували: leofun011

55 Востаннє редагувалося dot (27.05.2022 10:56:16)

Re: bash скрипти

-r означає рекурсивне видалення, тобто без нього ви більше одного файлу не видалите за раз(без нього це не буде працювати)

Vzahalê to možna vydalyty dekôljka fajlôv i bez -r, bo tut radše hynša rekurcija, pro kotru i napysano vô zhadanôj lancê:

remove directories and their contents recursively

Tobto jakščo snopy ne rozkydani po tekax, to rm -f access_log* error_log* dostatnjo. Pravda, ne pamjataju, čy bash može v ce, čy treba jakyjsj parameter do cjoho propysuvaty, bo môj nače robe, ale to može buty vplyv zsh.

No i možna išče takyj sposôb: ls | grep -E '^(access_log|error_log)' | xargs rm

56

Re: bash скрипти

Беру свої слова назад, без ключів теж спрацювало    *PARDON*

57

Re: bash скрипти

$ sudo rm /var/log/httpd/*_log-*

rm: не вдалося вилучити «/var/log/httpd/*_log-*»: No such file or directory

і ось так не працює:

$ sudo rm /var/log/httpd/access_log-*

rm: не вдалося вилучити «/var/log/httpd/access_log-*»: No such file or directory

хоча

$ sudo ls /var/log/httpd/

access_log  access_log-20220522  error_log  error_log-20220522

не розумію...

58 Востаннє редагувалося Alexv (27.05.2022 13:49:48)

Re: bash скрипти

https://replace.org.ua/uploads/images/4419/7da5dedc90d2451aa496ec77d1f5e0cc.png
Спробував в Дебіан, так само працює
Можливо, у вашій ОС синтаксис відрізняється, або ще варіант - цю команду треба виконувати в теці з файлами
спочатку

cd /var/log/httpd/

, а вже потім rm, або вказуйте шлях до теки

rm /var/log/httpd/*_log-*

59

Re: bash скрипти

мені потрібно автоматизувати в кроні, бо вручну в файл-менеджері mc я можу це зробити без проблем

тобто змінюю директорію за допомогою команди cd, тоді видаляю файли за маскою - помилка...

наступною командою відображаю наявні файли - всі файли на місці...

https://replace.org.ua/uploads/images/9801/5b2f72c9707cd56abaef0bff3bb9d067.jpeg


що тут не так?.....

60

Re: bash скрипти

sudo crontab -e

вписав такий рядок

10 *   *  *    *    rm /шлях/до/теки/*_log-*

на 10 хвилині спрацювало

Подякували: leofun011