• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Skrypt BASHA do tworzenia albumu ze zdjęciami w html-u

+4 głosów
86 wizyt
pytanie zadane 13 września 2016 w Nasze projekty przez obl Pasjonat (21,960 p.)
edycja 1 października 2016 przez obl

Napisałem sobie kiedyś ze dwie aplikacje, które tworzą album zdjęć html jedną w Qt pod Linuksa i jedną w C# pod Windowsa, zastanawiałem się jednak jakby to wyglądało (tak mniej więcej) w BASH-u i dlatego napisałem sobie taki mały skrypt, który zamieściłem na stronie tutaj.

Skrypt działa na Linuksie i trzeba go zapisać w pliku sh w miejscu zdjęć, na podstawie których ma być utworzony album. Uruchomienie z konsoli: sh ./html_gen2.sh

Edit:

Trochę podrasowałem skrypt teraz do jego poprawnego działania konieczna jest obecność w systemie powłoki BASH w wersji 4+, ale za to można zrobić coś takiego:

bash html_gen.sh body_color=#ff9955 nav_color=#ffccaa links_color=#c04d00 img_width=250 files_on_page=50

Czyli można zmienić domyślne ustawienia wyglądu strony oraz szerokości tworzonych miniatur zdjęć.

Kod skryptu wrzuciłem tutaj

1 odpowiedź

+1 głos
odpowiedź 13 września 2016 przez Benek Nałogowiec (30,390 p.)
wybrane 13 września 2016 przez obl
 
Najlepsza

Świetny, prosty skrypt. Mam kilka drobnych uwag. Linię 4. zmieniłbym na:

files_list=$(ls -R 2>/dev/null *.jpg *.JPG *.gif *.GIF *.png *.PNG); # tworzenie listy plików

Dzięki temu, jeśli w katalogu nie będzie zdjęć któregoś typu, to komunikaty polecenia ls zostaną przekierowane na standardowe wyjście błędów i nie będą widoczne na ekranie. Jeśli wypisujesz już jakieś komunikaty diagnostyczne na ekran, mowa o liniach: 10 i 12, to można by je opisać:

echo "Liczba plików: $val"; # wyświetlam ile plików znaleziono
...
echo "Liczba podstron: $nrof"; # wyświetlam liczbę podstron

Poza tym warto sprawdzić czy katalog o nazwie folder już nie istnieje, by go nie nadpisać:

if [ -d folder ]; then
  mkdir inna_nazwa
fi

Zmniejszyłbym też ilość maksymalnej liczby miniatur na podstronę, bo jest trochę przewijania. Ponadto liczba ta powinna być podzielna przez 3 bez reszty, tak by kompozycja była domknięta (miniatury tworzyły duży prostokąt) przy całej wypełnionej podstronie. By wywołać skrypt wystarczy użyć:

sh html_gen2.sh

Lub dodać do pierwszej linii skryptu dyrektywę interpretera, zmienić uprawnienia pliku i wywołać w bieżącym katalogu, kolejno:

#!/bin/bash
...
chmod 755 html_gen2.sh
./html_gen2.sh

Poza tym dobra robota.

komentarz 13 września 2016 przez obl Pasjonat (21,960 p.)
Dzięki za konstruktywną krytykę. Ten pierwszy sposób przekierowania wyświetlania komunikatów błędów muszę przetestować, jak okaże się, że działa to poprawię. Co do drugiego, to już takie proste nie jest bo np. niech będzie ten folder o nazwie "folder" i niech zaistnieje taka sytuacja, że ten folder już istnieje - to według twojego podejście powinienem utworzyć inny folder znów z podaną na sztywno nazwą. A co jak ktoś odpali skrypt podwójnie? Myślę, że trzeba by zapytać najpierw czy czasem użytkownik nie chce go nadpisać, jak chce to nadpisać ten folder. A jak nie to zapytać trzeba by o inną nazwę i w pętli sprawdzać, czy taki folder istnieje.

Przyznaję się szczerze to jest ta część roboty programisty, której nienawidzę.
komentarz 13 września 2016 przez Benek Nałogowiec (30,390 p.)

Ten pierwszy sposób przekierowania wyświetlania komunikatów błędów muszę przetestować, jak okaże się, że działa to poprawię.

Działa, bo sprawdzałem :)

Co do drugiego, to już takie proste nie jest bo np. niech będzie ten folder o nazwie "folder" i niech zaistnieje taka sytuacja, że ten folder już istnieje (...)

Zgadza się, w zasadzie nie chciałem Ci pisać jak ja bym to implementował, tylko raczej chodziło mi by zasygnalizować Ci problem. Oczywiście może się zdarzyć tak, że ten zapasowy katalog już istnieje. Najpierw zmieńmy nazwę folder na bardziej konkretną pod to zadanie, np. pictures. Zabezpieczyłbym się w ten sposób, że tworzyłbym kolejne katalogi z nazwą wzorcową, np. picturesNR, gdzie NR to konsekutywne liczby naturalne. Ten kod pozwoli Ci to zrealizować:

#!/bin/bash
cat=pictures
NR=1

if [ -d $cat ]
then
	while [ -d ${cat}${NR} ]
	do
		NR=$[NR + 1]
	done
	cat=${cat}${NR}
fi

mkdir $cat

Jest to gotowy skrypt. Jeśli w katalogu roboczym nie ma żadnego katalogu rozpoczynającego się od znaków pictures, to taki katalog zostanie utworzony. Jeśli jest, to utworzony zostanie pictures1. Jeśli istnieje ciąg katalogów pictures1, ..., pictures8, to skrypt utworzy katalog pictures9. A jeśli w podanym ciągu zabraknie np. pictures5, to właśnie ten katalog zostanie stworzony. Możesz sobie to przetestować i zaimplementować w swoim programie.

komentarz 13 września 2016 przez obl Pasjonat (21,960 p.)
A wiesz, ja to już obsłużyłem i wstawiłem u siebie na stronę, chociaż trochę inaczej bo żem użytkownika do roboty zaprzęgł, ale twój pomysł mi się też podoba. Mój jest gorszy bo użytkownik musi podać odpowiednią nazwę, a z drugiej strony lepszy bo daje użytkownikowi wolną wolę :)

Podobne pytania

0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 29 grudnia 2016 w Nasze projekty przez Michał Muzyka Stary wyjadacz (12,190 p.)
0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 22 maja 2016 w Inne języki przez Vendea Nowicjusz (120 p.)
0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 20 listopada 2015 w Inne języki przez sh1nen Obywatel (1,570 p.)
...