Notes/Prog/5_bash

1_math 2_ps 3_charts 5_bash 7_js 9_prog_short

Neocities 01scrip_v1.0.1

#	ATTENTION!!! switching is dangerous! see "up"
# ---------------------------------------- составляем список файлов 
echo "исключена проверка 'nu'"
bd_former() { stat -c '%Y %n' `find ./* -type f`|sort| sed  's!./!!;/bd_old/d;/PP/d;/ bd$/d;/01scrip*/d;/Sub\/nu/d' > bd; };
#bd_former() { stat -c '%Y %n' `find ./* -type f`|sort| sed  's!./!!;/bd_old/d;/PP/d;/ bd$/d;/01scrip*/d' > bd; };

mv bd bd_old		# защищает от дописывания новых строк в конец старого файла 
rm -f up		# век живи - век учись: ключ -f подавляет сообщение, если там нет up.
bd_former
# ---------------------------------------- определяем характер изменения
pirs() { 
  var=''
  for i in `echo $1|grep html|sed -r 's!\/[^/]*\.html!\n!'|tr \  \\n| sort -u`	# составляем списки директорий, в которых изменились хтмл
  do
    var+=$'\n'$(echo ${i/%Sub/index.html} `find $i -maxdepth 1 -name "*.html"`)
  done
  echo "$var"		# не выводится на экран, но используется для подстановки за пределами функции
}

of=`comm -23 bd_old bd|awk '{print $2}'|sort`	#удалить 2,3 поля
djof=`pirs $of`
nf=`comm -13 bd_old bd|awk '{print $2}'|sort`	#удалить 1,3 поля
djnf=`pirs $nf`

for i in $nf            # удаляем из старых то, что есть и в новых
  do of=`echo ${of/$i/}`
done

#---------------------------------------------------

if [[ $djof != $djnf ]]
then 
  bash PP/nav_paster*	# если есть уникальные html, то обновляем навигацию
  bash PP/lin_paster*
  nf=$(echo "$nf" "$djof" "$djnf"|tr \  \\n| sort -u)
  rm -f bd
  touch `find`		# трогаем ВСЕ файлы
  bd_former		# обновляем bd. теперь везде - новое время.
  echo "--- some navigation changes !!!----"
fi
# ---------------------------------------- формируем аплоадный скрипт
echo "`echo $of |wc -w` for deleting"
for i in $of
do
  echo "	$i"
  echo "curl -d filenames[]=$i https://a-notes:********@neocities.org/api/delete" >> up
done

echo "`echo $nf |wc -w` for uploading"
for i in $nf
do
  echo "	$i"
  echo "curl -sS -F $i=@$i https://a-notes:********@neocities.org/api/upload" >> up
done

echo "rm up" >> up
rm bd_old
 

Neocities lin_paster_v0.3

second_string_paster () {
  d=${file%.html}                       # определяем имя файла: отрезаем .html
  d=${d##*/}                            # и отрезаем путь
  a=${file#.}                           # определяем путь к файлу, нaчиная с /, но без начальной точки
  a=${a%/*}                             # и отрезаем имя
  if [ $d != "index" ]; 
    then a=${a%/*}                      # отрезаем последний 'Sub'
  fi
  c=''                                  # будущая серединка
  for i in `echo $a|grep -o "Sub"`      # цикл по количеству Sub
  do
    b=${a##*/}                          # находим имя последней папки, отрезая начало пути
    c="/<a href="$a">"$b$c              # </a>пришиваем href=, формируем ссылку, ставим ее в начало строки
    a=${a%/*/*}                         # отбрасываем последнюю папку и последний Sub
  done
  if [ $d = "index" ]                   # пришиваем гриву и ХВОСТИК.
    then str2="<h1><a href=/>Notes"$c"</a></h1>" 
    else str2="<h1><a href=/>Notes"$c"/<a href=$d.html>$d</a></h1>"
  fi
  echo $file
  sed -i "2d;1a$str2" $file             # вписываем результат в файл
}

for file in `find|grep html`
  do second_string_paster
done
 

Neocities nav_paster_v1.1

root=`pwd`
  
pastin() {
  sed -i "3,/<hr>/c$nav <hr>" $1	# выкидываем старую навигацию ДО <hr> !!!!! --- вставляем новую (и харю)
  sed -i '3{s/<a/ <a/g;s/> />\n/g}' $1	# вставляем красивые отступы и режем строку навигации на ссылки отдельными строками
}
nav_former() {
  ar=`find Sub -mindepth $1 -maxdepth $1  -name '*.html' -printf '%P\n'|sort -g`
  for i in $ar
    do nam=${i%.html} 			# 'nam'- имя файла без расширения
    nam=${nam%/index}			# это - только для индексов!
    nav+=" <a href=Sub/$i>$nam</a>"	# 'nav'- уже навигация, все в одну строку
  done
}

for dir in `find -name index.html`	# поиск директорий, в которых лежат индексы
do					# вставка идет в индекс и в файлы, лежащие в 'Sub' данной директории
  cd ${dir%/index.html}			# переходим в выбранную директорию (index.html отрезан!)
  #echo $_				# отладка: '$_' - это последний аргумент (директория)
  nav=''
  nav_former 1
  list=$ar
  nav_former 2
  pastin index.html			# вставляем в индекс
  nav=${nav//'Sub/'/}			# модифицируем навигацию для файлов: срезаем в начале 'Sub/'
  for f in $list			# вставляем в файлы, лежащие в 'Sub'
    do pastin Sub/$f
  done
  cd $root				# возврат в корень. поиск директорий идет от корня. 
done

Neocities gallery creator (dir must contain some '.jpg')

# this shit:
# 1) renames *.jpg in current dir and replace them into dir 'q'
# 2) resizes *.jpg dir 'q' to 100px along minimal side length and places them into dir 'q/thumbs'
# 3) forms sprite of 4 by row 'q/0.jpg' and 'index.html' with map of hrefs
#==============================================================================
if [[ ! $1 ]]; then echo "Enter the N of the gallery!"; exit; fi

picdir=$1				# the name of pics dir is its number N

rm -rf $picdir; mkdir $picdir
i=1
for f in `find -name '*.jpg'`
  do mv $f ./$picdir/$i.jpg
  i=$(($i+1))
done

cd $picdir

rm -rf thumbs; mkdir thumbs		# thumbnails creation
mogrify -path thumbs -thumbnail 100^ -crop 100x100+0+0 -gravity Center  -bordercolor Darkgrey -border 3 *.jpg
cd thumbs

N=`find -name '*.jpg' |wc -w`           # count of pics and grey squares addition

n_add=$(( (4-$N%4)%4 ))                 # empty squares addition
for i in `seq $n_add`; do convert -size 106x106 xc:Darkgrey $(($N+$i)).jpg; done

N_new=$(($N+$n_add))
echo "добавлено файлов: $n_add, стало: $N_new"


rm -rf temp; mkdir temp                 # rows by 4 pics creation

for i in `seq $(($N_new/4))`
        do
        i0=$((4*($i-1)+1))
        i1=$((4*($i-1)+2))
        i2=$((4*($i-1)+3))
        i3=$((4*($i-1)+4))
  convert $i0.jpg  $i1.jpg  $i2.jpg  $i3.jpg +append ./temp/$i.jpg
done

cd temp                                 # entire sprite creation
convert `ls -tr` -append ../../0.jpg
cd ..
rm -r temp
cd ..
rm -r thumbs
cd ..					# !!! index in current!

rm -f index.html			# webpage creiation
echo "<!DOCTYPE html><html><meta charset=utf-8><link rel=stylesheet href=1.css>
<h1><a href=/>Notes/<a href=/Sub/nu>nu/<a href=$picdir.html>$picdir</a></h1>

<hr>
<img src=$picdir/0.jpg usemap=#map><map name=map>" >> $picdir.html

map() {                                 # link creation function
  y1=$(( $1*106+3 ))
  y2=$(( $y1+100 ))
  for j in `seq $2`
  do
    x1=$(( ($j-1)*106+3 ))
    x2=$(( $x1+100 ))
    hre=$(( $1*4+$j ))
    echo "<area shape=rect coords='$x1,$y1, $x2,$y2' href=#1 onclick=v($N,$picdir,$hre)>" >> $picdir.html
  done
  }

for i in `seq $(($N/4))`; do map $(($i-1)) 4; done       # links creation for full rows
map $(($N/4)) $(($N%4))                  # links creation for incomplete rows

echo "</map><script src=pics.js></script>" >> $picdir.html

echo "
function u() {document.querySelector('#divan').remove()}
  function v(N_pics,dir,obj) {
    if (document.getElementById('divan')){u()}
    const divan = document.createElement('div')
    divan.setAttribute('id','divan')
    function p(kuda,chto,skolko) {
      const hz = document.createElement('div')
      hz.setAttribute('id',kuda)
      hz.setAttribute('onclick','v('+N_pics+','+dir+','+skolko+')')
      hz.innerHTML = chto
      divan.appendChild(hz)
    }
    if (obj > 1) {p('suda','‹',obj-1)}
    const image = document.createElement('img')
    image.src  = dir+'/'+obj+'.jpg'
    image.setAttribute('onclick','u()')
    document.querySelector('body').appendChild(divan)
    divan.appendChild(image)
    if (obj < N_pics) {p('tuda','›',obj+1)}
  }
" > pics.js

echo "
html {
        height: 100%;
        min-height: 100%;
        background: #222;
}

body{ text-align: center;font: 15px Sans;}
hr {display:none}

[usemap] {
        display: block;
        margin: 15px auto;
        border: 3px solid Darkgrey;
        }

a{color: #b96; text-decoration: none;}


#divan {
        width: 90%;
        height: 100%;
        margin: 0 5%;
        position: fixed;
        top: 0;
        text-align: center;
        background: #222;
}

#divan img {height: 100%}

#tuda, #suda {
        position:absolute;
        top: 40%;
        font: 80px Serif;
        font-weight: 100;
        color: #777;
        text-shadow: 0 0 5px black;
        width: 30%;
        height: 30%;
        cursor: pointer;
}

#tuda:hover, #suda:hover {color: white; transition: 1s ease}

#tuda {right: 0}
#suda {left: 0}
" >> 1.css

Parsers

https://www.toptal.com/designers/subtlepatterns/

	rm urls *.html

	for i in `seq 45`
	do
	wget https://www.toptal.com/designers/subtlepatterns/page/$i/
	sed -n '/patternpreview/p' index.html | `
	`sed -e 's/^.*desi/https:\/\/www.toptal.com\/desidesi/;s/png.*/png/'>>urls
	rm index.html
	done
 

Short utilities

Timer "mimer" (without sha-bang & comments)

if ! [[ `pidof zenity` == '' ]]; then exit; fi
time="_______________"`date +%H:%M`"_______________"
str=`DISPLAY=:0 zenity --text-info --editable --title=$time --height=200 --filename note_bene`
if ! [[ $str == '' ]]; then echo $str > note_bene; fi
 

Random jpg demonstrator "ti-timer"

pic_dir=~/Dropbox/back_light/SITES/Notes/Sub/nu/
font=.local/share/fonts/Arial_Black.ttf

DISPLAY=:0 feh -zqrZF -e "$font/24" --info "echo `date +%H:%M`" --draw-tinted $pic_dir &
sleep 3
kill -SIGKILL %1
 

JPG-renamer

# this shit renames *.jpg to CORRECT names 'N.jpg' where 'N' is a number and replaces them into new dir 'q'

mkdir q
i=1
for f in `find -name '*.jpg'`
  do mv $f ./q/$i.jpg
  i=$(($i+1))
done
 

Neocities picscript

rm *.png.jpeg
picdir=~/Pictures/lili
n=1
for i in `ls $picdir | shuf -n 5`
	do  convert $picdir/$i -resize 200 $n.png.jpeg
	((n++))
done
bash 01scrip*
bash up
 

Neocities diascript

input=~/Dia_2023
output=Sub/Diary/Sub/00_dia.html

sed -i '//,$d' $output

echo "" >> $output
cat  $input >> $output

echo "" >> $output

bash 01scrip_v*
 

Neocities badw_script

a=$(echo   `curl -s http://fucking-great-advice.ru/api/random`|awk -F \" '{print $6}' )
sed -i "/Совет дня: /s/дня: .*/дня: `echo ${a}`/g" index.html	# подстановка переменной в сед!
head -n 20 index.html