Notes/5_bash

tu 1_math 2_all 3_charts 4_i3 5_bash 6_avia 7_js 8_Dia23 9_prog_short Archive Barahlo Life nu

Neocities 01scrip_v0.6.1

echo "исключена проверка 'nu'"
# ---------------------------------------- составляем список файлов 
bd_former() { md5sum `find ./* -type f`|sort| sed -r 's!./!!;/bd_old/d;/ bd$/d;/Sub\/nu/d' > bd; }

mv bd bd_old		# защищает от дописывания новых строк в конец старого файла 
rm -f up		# век живи - век учись: ключ -f подавляет сообщение, если там нет up.
bd_former
# ---------------------------------------- определяем характер изменения
of=`comm -23 bd_old bd|awk '{print $2}'|sort`
jof=`grep html <<< "$of"`
nf=`comm -13 bd_old bd|awk '{print $2}'|sort`
jnf=`grep html <<< "$nf"`

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

if [[ $jof != $jnf ]]
then 
  bash nav_paster*	# если есть уникальные html, то обновляем навигацию
  bash lin_paster*
  nf+=$'\n'`cat bd|grep html|awk '{print $2}'`	# добавляем все html, даст дублирование
  nf=`sort -u <<< "$nf"|uniq`			# удаляем дубли
  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.0.1

root=`pwd`
  
pastin() {
  sed -i "3,/<hr>/c$nav <hr>" $1	# выкидываем старую навигацию ДО <hr> !!!!! --- вставляем новую (и харю)
  sed -i '3{s/<a/ <a/g;s/> />\n/g}' $1	# вставляем красивые отступы и режем строку навигации на ссылки отдельными строками
  #head $1				# '$i'  - имя файла. если разблокировано, выведет верхушку, с новой навигацией.
}
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
}
autonav() {				# главная функция
  #echo $dir				# вставка идет в индекс и в файлы, лежащие в 'Sub' данной директории
  cd $dir				# переходим в директорию, выбранную в главном цикле
  nav=''
  nav_former 1
  list=$ar
  nav_former 2
  if [[ -e index.html ]]
    then pastin index.html		# вставляем в индекс
    else echo "WRONG! index.html does not exist!"
  fi 
  nav=${nav//'Sub/'/}			# модифицируем навигацию для файлов: срезаем в начале 'Sub/'
  for f in $list			# вставляем в файлы, лежаще в 'Sub'
    do pastin Sub/$f
  done
  cd $root				# возврат в корень. поиск директорий идет от корня. 
}

for dir in `find -type d \! -name Sub`  # поиск директорий, в которых лежат индексы
  do autonav
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