Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
W wystawianiu aukcji najbardziej nie lubię zmiany rozmiaru i wrzucania zdjęć a później tworzenia linków do nich. Dlatego wymóżdzyłem sobie żeby machnąć skrypt robiący to za mnie a ja tylko będę musiał wkleić wygenerowane linki na aukcje.
Napisałem coś takiego:
#!/bin/bash login="**" pass="***" serwer="****" default="\033[0m"; green="\033[0;32m"; liczba=0; for plik in $1.JPG do convert -size 800x600 $HOME/$plik -resize 800x600 $HOME/$plik echo -e "\n $green Plik: $plik został zmniejszony $default" lftp -u $login,$pass $serwer -e "put -c $plik;quit" liczba=$(expr $liczba + 1) done echo -e "\n Wysłanych plików: $liczba"
Jak widać skrypt wywołuje się z parametrem który jest folderem w którym znajdują się zdjęcia.
Problemów mam kilka ponieważ nigdy jakoś w bash'u się nie zagnębiałem :)
1. Czy jest możliwość sprawdzenia poprawności wysyłania pliku na serwer?
2. Jak wyciągnąć nazwę pliku? Wtedy ładnie sobie wygeneruje gotowe linki do wklejenia na aukcję.
3. Jak zrobić filtr na pliki graficzne *.JPG,*.jpg,*.PNG etc.? Jak na razie udało mi się na jeden rodzaj zrobić (*.JPG).
4. W jaki sposób można dodawać ciąg znaków do zmiennej tzn. mam w zmiennej "aaa" dodaje "bbb" i mam zmienną o wartości "aaabbb".
Mile widziane uwagi/porady dotyczące samego napisania skryptu. Żeby później ładnie i poprawnie pisać jak ludzie będą patrzeć.
Ostatnio edytowany przez giegiel (2009-09-04 13:59:36)
Offline
Dobra rozwiązałem 2 punkty :D
2. Umieszczę skrypt w /usr/bin więc będę go po prostu uruchamiał z katalogu w którym są fotki ;)
4. Zrobiłem plik służący mi jako bufor.
Mile widziane porady jak ładniej to zrobić ;D
Teraz tak wygląda:
#!/bin/bash login="*" pass="*l" serwer="*l" default="\033[0m"; green="\033[0;32m"; echo "<center>" > kod liczba=0; for plik in *.jpg do convert -size 800x600 $plik -resize 800x600 $plik echo -e "\n $green Plik: $plik został zmniejszony $default" lftp -u $login,$pass $serwer -e "put -c $plik;quit" liczba=$(expr $liczba + 1) echo '<img src="http:/blee.pl/'$plik'"\></br>' >> kod done echo "</center>" >> kod echo -e "\n#######KOD DO WKLEJENIA#######" cat kod rm kod echo -e "#######KONIEC#######" echo -e "\n Wysłanych plików: $liczba"
Teraz potrzebuję pomocy z punktami 1 i 3 ;) Szczególnie 3 jest ważny. Pozdro
Offline
może się czepiam szczegółów ale to:
convert -size 800x600 $plik -resize 800x600 $plik
można zastąpić tym
convert $plik -resize 800x600 $plik
i też zadziała :)
a co do pliku tymczasowego to można to zrobić tak:
KOD='<center>'
a w pętli zamiast
echo '<img src="http:/blee.pl/'$plik'"\></br>' >> kod
dać:
KOD=${KOD}.'<img src="http:/blee.pl/'.${plik}.'"/></br>'
a potem
echo "</center>" >> kod
na
KOD=${KOD}.'</center>'
Przetestowane i działa ;]
Dodwanie ciągu znaków do zmiennej:
ZMIENNA="jakiś tekst" ZMIENNA=${ZMIENNA}."jakis inny tekst"
a co do filtru to jakiś regexp albo zabawa z awk i file ;] Rano popatrzę za starym skryptem bo gdzieś miałem zabawę z rozszerzeniami ;]
Ostatnio edytowany przez winnetou (2009-08-21 02:13:47)
Offline
1. co do filtru to np. cos takiego:
for plik in *.[Jj][Pp][Gg] *.[Pp][Nn][Gg] *.[Gg][Ii][Ff]; do
wylapie pliki z rozszerzeniami jpg, png, gif ... jezeli chialbyc nie w oparciu o rozszerzenia to mozesz sie bawic file
2. co do wycinania nazwy pliku z sciezki to masz "basename" do wycinania tej drugiej czesci masz "dirname"
Offline
bercik napisał(-a):
1. co do filtru to np. cos takiego:
Kod:
for plik in *.[Jj][Pp][Gg] *.[Pp][Nn][Gg] *.[Gg][Ii][Ff]; dowylapie pliki z rozszerzeniami jpg, png, gif ... jezeli chialbyc nie w oparciu o rozszerzenia to mozesz sie bawic file
2. co do wycinania nazwy pliku z sciezki to masz "basename" do wycinania tej drugiej czesci masz "dirname"
Działa ale czy da się tak zrobić żeby uniknąć takich błędów jak nie ma pliku danego formatu w katalogu?
Plik: p1030561.jpg został zmniejszony
Plik: p1030562.jpg został zmniejszony
Plik: p1030563.jpg został zmniejszony
Plik: p1030564.jpg został zmniejszony
convert: unable to open image `*.[Pp][Nn][Gg]': No such file or directory.
convert: missing an image filename `*.[Pp][Nn][Gg]'.
Plik: *.[Pp][Nn][Gg] został zmniejszony
convert: unable to open image `*.[Gg][Ii][Ff]': No such file or directory.
convert: missing an image filename `*.[Gg][Ii][Ff]'.
Plik: *.[Gg][Ii][Ff] został zmniejszony
#######KOD DO WKLEJENIA#######
<center><img src="http://www.kuba_ce.webpark.pl/p1030561.jpg"\></br><img src="http://www.kuba_ce.webpark.pl/p1030562.jpg"\></br><img src="http://www.kuba_ce.webpark.pl/p1030563.jpg"\></br><img src="http://www.kuba_ce.webpark.pl/p1030564.jpg"\></br><img src="http://www.kuba_ce.webpark.pl/*.[Pp][Nn][Gg]"\></br><img src="http://www.kuba_ce.webpark.pl/*.[Gg][Ii][Ff]"\></br></center>
#######KONIEC#######
winnetou miałeś się czepiać o to chodziło ;D Napisałem o tym w 1wszym poście heheh. Musiałem wywalić kropkę z takich wyrażeń:
ZMIENNA=${ZMIENNA}."jakis inny tekst"
Bo mi kropkę zapisywało w zmiennej i potem w generowanym kodzie kropki były.
Wielkie dzięki chłopaki za pomoc.
Offline
for plik in *.[Jj][Pp][Gg] *.[Pp][Nn][Gg] *.[Gg][Ii][Ff]; do if [ -f $plik]; then # wnetrze petli fi; done
Offline
Dzięki działa pięknie ;) Teraz mam tak:
#!/bin/bash login="*" pass="* serwer="**" link="*" default="\033[0m"; green="\033[0;32m"; KOD='<center>' rozmiar=0 liczba=0; for plik in *.[Jj][Pp][Gg] *.[Pp][Nn][Gg] *.[Gg][Ii][Ff] do if [ -f $plik ]; then convert $plik -resize 800x600 $plik echo -e "\n $green Plik: $plik został zmniejszony $default" # ftp -u $login,$pass $serwer -e "put -c $plik;quit" liczba=$(expr $liczba + 1) rozm=$(stat -c %s $plik) rozmiar=$((rozmiar+rozm)) KOD=${KOD}"<img src='$link$plik'\></br>" fi done KOD=${KOD}'</center>' echo -e "\n#######KOD DO WKLEJENIA#######" echo $KOD echo -e "#######KONIEC#######" rozmiar=$(echo $rozmiar/1024 | bc -l) echo -e "\n Rozmiar wysłanych plików to $rozmiar kB." echo -e "Wysłanych plików: $liczba"
Jak widać dodałem rozmiar wszystkich plików w kB ale problem w tym że dostaję wynik w takim formacie:
Plik: p1030561.jpg został zmniejszony
Plik: p1030562.jpg został zmniejszony
Plik: p1030563.jpg został zmniejszony
Plik: p1030564.jpg został zmniejszony
#######KOD DO WKLEJENIA#######
Blabla :)
#######KONIEC#######
Rozmiar wysłanych plików to 610.70117187500000000000 kB.
Wysłanych plików: 4
No jak widać nie ładnie to wygląda. Próbowałem to przerobić za pomocą awk i sed i nic mi nie wyszło z tego ;/ Help ;)
Ostatnio edytowany przez giegiel (2009-08-21 12:22:41)
Offline
jezeli chodzi o ilosc miejsc po przecinku to zamiast echo uzyj printf z odpowiednim napisem formatujacym ... sekwencje formatujace jak w C ... szczegoly w man
Offline
heh a próbowałem z tym printf i mi nie chciało wyjść :) teraz się zawziąłem i działa ale googlowałem i nie mogę znaleźć jak zrobic żeby mi nie zaokrąglało wyników, bo wychodzi tak:
kuba ~/test echo 325368/1024 | bc -l 317.74218750000000000000 kuba ~/test printf "%.2f" '625368/1024 |bc -l' 610,00%
Offline
env LANG=C printf "%.2f\n" `echo 325368/1024 | bc -l`
* odpowiednie ciapki zapewniaja podstawienie wyniku bc do printf
* env LANG=C zapewnia ze printf jako separator czesci ulamkowej bierze kropke ...
Offline
obejdzie się bez
env LANG=C
Przynajmniej z moimi localami używana jest kropka
Offline
rrp@ws-rrp:~$ printf "%.2f\n" `echo 325368/1024 | bc -l` bash: printf: 317.742: invalid number 0,00 rrp@ws-rrp:~$ locale LANG=pl_PL.UTF-8 LC_CTYPE="pl_PL.UTF-8" LC_NUMERIC="pl_PL.UTF-8" LC_TIME="pl_PL.UTF-8" LC_COLLATE="pl_PL.UTF-8" LC_MONETARY="pl_PL.UTF-8" LC_MESSAGES="pl_PL.UTF-8" LC_PAPER="pl_PL.UTF-8" LC_NAME="pl_PL.UTF-8" LC_ADDRESS="pl_PL.UTF-8" LC_TELEPHONE="pl_PL.UTF-8" LC_MEASUREMENT="pl_PL.UTF-8" LC_IDENTIFICATION="pl_PL.UTF-8" LC_ALL= rrp@ws-rrp:~$ cat /etc/debian_version 5.0
jak widac nie zawsze wiec dla pewnosci lepiej dawac ...
Offline
Dzięki wielkie chłopaki teraz pięknie działa :D
U mnie tak jest:
kuba ~ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=
kuba ~ printf "%.2f\n" `echo 325368/1024 | bc -l`
317,74
Już więcej nie będę wymyślał :D pierwsza aukcja wystawiona ;) pozdro
Offline
[Fri,21 Aug 16:00] [vidharr@Valhalla] [~] ]:-> printf "%.2f\n" `echo 325368/1024 | bc -l` 317.74 [Fri,21 Aug 16:00] [vidharr@Valhalla] [~] ]:-> locale LANG=en_US.utf8 LC_CTYPE=pl_PL.utf8 LC_NUMERIC=en_US.utf8 LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8 LC_PAPER=en_US.utf8 LC_NAME=en_US.utf8 LC_ADDRESS=en_US.utf8 LC_TELEPHONE=en_US.utf8 LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=en_US.utf8 LC_ALL= [Fri,21 Aug 16:00] [vidharr@Valhalla] [~] ]:-> cat /etc/gentoo-release Gentoo Base System release 2.0.1
Valhalla:/# printf "%.2f\n" `echo 325368/1024 | bc -l` 317.74 Valhalla:/# locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.utf8 LC_CTYPE=pl_PL.utf8 LC_NUMERIC=en_US.utf8 LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8 LC_PAPER=en_US.utf8 LC_NAME=en_US.utf8 LC_ADDRESS=en_US.utf8 LC_TELEPHONE=en_US.utf8 LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=en_US.utf8 LC_ALL= Valhalla:/# cat /etc/debian_version squeeze/sid
Tylko debian z chroota ;]
Offline
Wodzu Ty przecież używasz angielskich locali :P tam . odziela część ułamkową liczby, w języku polskim przecinek stąd są problemy na polskojęzycznych systemach. Ubiegł mnie
Ostatnio edytowany przez thalcave (2009-08-21 16:06:12)
Offline
a no tak lc_numeric jest angielskie ;]
Offline
Tematu nowego zakładać nie będę ;) ostatnio zafascynował mnie python więc postanowiłem pzerobić skrypt wysyłki na allegro na pythona. Oczywiście bez zgrzytów obyś się nie mogło :)
#-*- coding: utf-8 -*- import os import Image import ftplib import sys ilosc = 0 rozmiar = 0 roz = [ ".jpg", ".jpeg", ".png" ] directory = "." th = [] serwer = "***" login = "***" haslo = "***" def convert(bytes): bytes = float(bytes) if bytes >= 1048576: megabytes = bytes / 1048576 size = '%.2fMb' % megabytes elif bytes >= 1024: kilobytes = bytes / 1024 size = '%.2fKb' % kilobytes else: size = '%.2fb' % bytes return size ftp = ftplib.FTP(serwer) ftp.login(login, haslo) pliki = [os.path.normcase(f) for f in os.listdir(directory)] pliki = [os.path.join(directory, f) for f in pliki if os.path.splitext(f)[1] in roz] for i in pliki: if i[2] != ".": nazwa = "th_"+i[2:] im = Image.open(i) im = im.resize((800, 600)) im.save(nazwa, "JPEG") th.append(nazwa) size = os.path.getsize(nazwa) rozmiar = rozmiar + size print "Zmniejszono: " + nazwa + " - " + convert(size) ilosc = ilosc + 1 ftp.mkd(sys.argv[1]) ftp.cwd(sys.argv[1]) for i in th: print "Wysyłanie " + i f = open(i, "rb") ftp.storebinary(i, f) f.close() ftp.quit() print "\nIlość plików to: " + str(ilosc) print "Rozmiar wszystkich plików to: " + convert(rozmiar)
I efekt mam taki:
kuba ~/bash python allegro.py dupa Zmniejszono: th_p1010421.jpg - 121.46Kb Zmniejszono: th_p1010413.jpg - 38.42Kb Zmniejszono: th_p1010411.jpg - 44.39Kb Zmniejszono: th_p1010415.jpg - 77.69Kb Zmniejszono: th_p1010412.jpg - 57.41Kb Traceback (most recent call last): File "allegro.py", line 47, in <module> ftp.mkd(sys.argv[1]) File "/usr/lib/python2.5/ftplib.py", line 520, in mkd resp = self.sendcmd('MKD ' + dirname) File "/usr/lib/python2.5/ftplib.py", line 241, in sendcmd return self.getresp() File "/usr/lib/python2.5/ftplib.py", line 216, in getresp raise error_perm, resp ftplib.error_perm: 550 dupa: File exists
To że katalog się nie tworzy bo jest to kichać potem to poprawię :) Ale to, że plik się nie wysyła to jest problem. Help
Offline
Dobra działa :D
for i in th: print "Wysyłanie " + i f = open(i, "rb") stor = "STOR " + i ftp.storbinary(stor, f) f.close()
Offline
Strony: 1