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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-08-20 23:43:17

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Skrypt w bashu/pythonie do wysyłania plików na serwer

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:

Kod:

#!/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

 

#2  2009-08-21 01:15:54

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

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:

Kod:

#!/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

 

#3  2009-08-21 01:59:25

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

może się czepiam szczegółów ale to:

Kod:

convert -size 800x600 $plik -resize 800x600 $plik

można zastąpić tym

Kod:

convert $plik -resize 800x600 $plik

i też zadziała :)

a co do pliku tymczasowego to można to zrobić tak:

Kod:

KOD='<center>'

a w pętli zamiast

Kod:

echo '<img src="http:/blee.pl/'$plik'"\></br>' >> kod

dać:

Kod:

KOD=${KOD}.'<img src="http:/blee.pl/'.${plik}.'"/></br>'

a potem

Kod:

echo "</center>" >> kod

na

Kod:

KOD=${KOD}.'</center>'

Przetestowane i działa ;]


Dodwanie ciągu znaków do zmiennej:

Kod:

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)


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#4  2009-08-21 09:51:09

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

1. co do filtru to np. cos takiego:

Kod:

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"


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#5  2009-08-21 10:55:40

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

bercik napisał(-a):

1. co do filtru to np. cos takiego:

Kod:

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"

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ń:

Kod:

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

 

#6  2009-08-21 11:00:23

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Kod:

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

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2009-08-21 12:22:15

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Dzięki działa pięknie ;) Teraz mam tak:

Kod:

#!/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

 

#8  2009-08-21 12:46:18

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

jezeli chodzi o ilosc miejsc po przecinku to zamiast echo uzyj printf z odpowiednim napisem formatujacym ... sekwencje formatujace jak w C ... szczegoly w man


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#9  2009-08-21 15:17:13

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

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:

Kod:

kuba ~/test echo 325368/1024 | bc -l             
317.74218750000000000000
kuba ~/test printf   "%.2f" '625368/1024 |bc -l' 
610,00%

Offline

 

#10  2009-08-21 15:38:23

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Kod:

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 ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#11  2009-08-21 15:46:04

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

obejdzie się bez

Kod:

env LANG=C

Przynajmniej z moimi localami używana jest kropka


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#12  2009-08-21 15:56:53

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Kod:

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 ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#13  2009-08-21 16:01:05

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

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

 

#14  2009-08-21 16:03:28

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Kod:

[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

Kod:

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 ;]


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#15  2009-08-21 16:05:33

  thalcave - prawie jak admin

thalcave
prawie jak admin
Skąd: odległa galaktyka
Zarejestrowany: 2007-05-17

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

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)


linux register user: 484281
"It's great to be here. It's great to be anywhere"
Keith Richards

Offline

 

#16  2009-08-21 16:10:19

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

a no tak lc_numeric jest angielskie ;]


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#17  2009-09-04 13:59:10

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

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 :)

Kod:

#-*- 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:

Kod:

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

 

#18  2009-09-04 22:22:55

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Skrypt w bashu/pythonie do wysyłania plików na serwer

Dobra działa :D

Kod:

 for i in th:
          print "Wysyłanie " + i
          f = open(i, "rb")
          stor = "STOR " + i
          ftp.storbinary(stor, f)
          f.close()

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)