Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: wenu w 2010-04-04, 19:07:11

Tytuł: bash - szukanie, pakowanie i wysylanie na serwer plików
Wiadomość wysłana przez: wenu w 2010-04-04, 19:07:11
Witam.
Staram się napisać skrypt, który wyszuka w katalogu wszystkie pliki *srs, następnie spakuje każdy plik osobno zipem z oryginalną nazwą pliku, czyli np. plik 123.srs spakuje i będzie to 123.srs.zip.
Następnie skrypt zaloguje się na serwer ftp i wrzuci każdy plik do odpowiedniego katalogu. Na razie wypociłem coś takiego:
Kod:
#!/bin/bash
filename="*.srs"
logname="log.txt"
filename2="*.dem.zip"
hostname="xxx"
username="xxx"
password="xxxr"
katalog="test"
data=`date`
zip $filename $filename
echo "wysylanie na $hostname pliku o nazwie $filename do katalogu
$katalog"

echo "$data -wyslano do serwera" >> log.txt
ftp -in $hostname <<**

quote USER $username
quote PASS $password

cd test2
cd $katalog
binary
put $filename2
quit


**
Muszę poparwić aby szukał pliku i pakował, jeśli znajdzie, domyślam się, że trzeba użyć ,,while''.
Proszę o pomoc.

Wesolych Świąt!@

@edit :
znalazłem błąd skrypt wysyła tylko 1 plik np mam 1.srs 2.srs 3.srs , wysle tylko plik 1.srs dopewiro gdy usune 1.srs wysle 2.srs itp
Tytuł: bash - szukanie, pakowanie i wysylanie na serwer plików
Wiadomość wysłana przez: roobal w 2010-04-04, 22:19:57
Moim zdaniem lepiej użyć pętli for. Spróbuj to zrobić tak:

#!/bin/bash

# Zmienne.

HOSTNAME="xxxx"
USERNAME="yyyy"
PASSWORD="zzzz"
KATALOG="/sciezka/do/katalogu/"
DATA=`date +%format %daty (więcej man date)`

# Szukanie plików.

for i in *.srs; do
  zip $i $i-$DATA.zip
  echo "Wysyłanie na $HOSTNAME pliku o nazwie $i-$DATA.zip do katalogu $KATALOG
  if [ -f $KATALOG/$i-$DATA.zip ]; then
    echo "Plik wysłano." >> log.txt
  else
    echo "BŁĄD!"
  fi
done

ftp in $HOSTNAME

quote USER $USERNAME
quote PASS $PASSWORD

cd test2
cd $KATALOG
binary
put $i-$DATA.zip
quit

exit 0
Z tym, że zarówno twój jak i mój sposób będzie pakował wszystkie pliki srs, żebyś mógł pakować każde z osobna to musiałbyś podać ich nazwę, wtedy wyglądałoby to tak:

#!/bin/bash

# Zmienne.

HOSTNAME="xxxx"
USERNAME="yyyy"
PASSWORD="zzzz"
KATALOG="/sciezka/do/katalogu/"
DATA=`date +%format %daty (więcej man date)`

# Szukanie plików.

for i in $1.srs; do
  zip $i $i-$DATA.zip
  echo "Wysyłanie na $HOSTNAME pliku o nazwie $i-$DATA.zip do katalogu $KATALOG
  if [ -f $KATALOG/$i-$DATA.zip ]; then
    echo "Plik wysłano." >> log.txt
  else
    echo "BŁĄD!"
  fi
done

ftp in $HOSTNAME

quote USER $USERNAME
quote PASS $PASSWORD

cd test2
cd $KATALOG
binary
put $i-$DATA.zip
quit

exit 0
Wtedy nazwę pliku podajesz jako parametr skrytpu, np. skrpt.sh plik1234.srs

Pozdrawiam!
Tytuł: bash - szukanie, pakowanie i wysylanie na serwer plików
Wiadomość wysłana przez: wenu w 2010-04-05, 12:29:54
Bardzo dziękuje Ci roobal za zainteresowanie sie moim problemem i odpowiedz . Celem jest akutomatyczny skrypt wykonywany w corn wiec niestety podawanie azwy odpada :< moze wtedy sie sie to zrobic w innym formacie archiwum zeby przyjmowało orginalne nazwy? Jest jeszcze jeden problem . SKrypt wysyla tylko 1 plik jaki znajdzie na serwer reszte zostawia próbowałem go wcozraj zapętlić ale nici z tego niestety programowanie to moja słaba strona :<
Tytuł: bash - szukanie, pakowanie i wysylanie na serwer plików
Wiadomość wysłana przez: wenu w 2010-04-05, 15:31:26
wyczytalem jak spakowac kazdy plik srs zipem zorginalana nazwa
!
find . -type f -iname '*.srs' -exec zip {}.zip {} \\;

teraz tylko jak zapetlic wysylanie :<