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



 Członek DUG
 Członek DUG
	




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



 Członek DUG
 Członek DUG
	




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




 złodziej wirków ]:->
 złodziej wirków ]:->
	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




 Moderator Mamut
 Moderator Mamut
	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



 Członek DUG
 Członek DUG
	




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




 Moderator Mamut
 Moderator Mamut
	for plik in *.[Jj][Pp][Gg] *.[Pp][Nn][Gg] *.[Gg][Ii][Ff]; do if [ -f $plik]; then # wnetrze petli fi; done
Offline



 Członek DUG
 Członek DUG
	




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




 Moderator Mamut
 Moderator Mamut
	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



 Członek DUG
 Członek DUG
	




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




 Moderator Mamut
 Moderator Mamut
	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




 złodziej wirków ]:->
 złodziej wirków ]:->
	obejdzie się bez
env LANG=C
Przynajmniej z moimi localami używana jest kropka
Offline




 Moderator Mamut
 Moderator Mamut
	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



 Członek DUG
 Członek DUG
	




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




 złodziej wirków ]:->
 złodziej wirków ]:->
	[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


 prawie jak admin
 prawie jak admin
	


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




 złodziej wirków ]:->
 złodziej wirków ]:->
	a no tak lc_numeric jest angielskie ;]
Offline



 Członek DUG
 Członek DUG
	




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 existsTo ż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



 Członek DUG
 Członek DUG
	




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