Nowe posty

Autor Wątek: [bash] Sprawdzanie czy plik istnieje na maszynie zdalnej  (Przeczytany 10854 razy)

danket

  • Gość
Witam!
Czy mógłby mi ktoś z forumowiczów zorientowanych w linuxie bardziej niż ja :) podpowiedzieć jak w bashu sprawdzić czy znajduje się określony plik na maszynie zdalnej, do której mam dostęp ftp? Próbowałem łączyć test i wget, ale coś chyba źle myślę :/ Potrzebuję tylko dostać na returnie true albo false, jeśli true - plik będzie ściągany. Chodzi o to, że dostawca pewnej usługi dla mojej firmy robi dwa razy dziennie dump bazy danych do plików txt a problem polega na tym, że nie robi tego o określonych godzinach. Więc napisałbym sobie skrypcik, który co 15 minut sprawdzałby czy jest już nowa wersja.
Dzięki!

arctgx

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #1 dnia: 2008-01-14, 17:53:07 »
Może prędzej poleceniem rsync byś się zainteresował? Albo opcją mirror w lftp? Nie bawiłem się nigdy żadnym z nich w ten sposób.

danket

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #2 dnia: 2008-01-14, 18:34:43 »
O, dzięki wielkie, własnie czytam mana do rsync, zerkne też na lftpa. Dzieki!

danket

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #3 dnia: 2008-01-14, 19:13:24 »
@arctgx dzięki za podpowiedzi. Poczytałem o rsync i lftp i nie bardzo widze tam rozwiązanie dla siebie. Albo nie wiem jak użyć :)
Chodzi mi o zwykłe sprawdzenie czy plik istnieje i zwrot true albo false tak jak w przypadku
if [ -e path/to/file.txt ] ; then
   wykonuje moje instrukcje
fi
tylko, że plikiem sprawdzanym jest plik na zdalnej maszynie do ktorej mam dostęp przez ftp. Czyli teoretycznie chodzi mi o coś takiego:
if [ -e ftp://user:pass@ftpserver.com/katalog/mojplikdosprawdzenia ] ; then
   wykonuje moje instrukcje
fi
Nazwa pliku sprawdzanego budowana jest na bazie aktualnej daty, np. plik011408.txt, jakkolwiek leżą tam równiez pliki z poprzednich 5 dni.
Jak widzisz więc, potrzebowałbym czegoś naprawdę prostego.
Napisałem sobie całość w php, ale chciałbym to oddzielić z pewnych powodów, dopiero parsowanie pliku ściągniętego odbywać się będzie w php.
Gdybyś miał jakieś pomysły poza już podanymi byłbym bardzo wdzięczny.
Dzięki.

arctgx

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #4 dnia: 2008-01-14, 19:19:50 »
Nie tędy droga, chyba że system plików na serwerze FTP byłby zamontowany w Twoim: wtedy warunek "-e" zadziała.

Myślę wstępnie, że te instrukcje warunkowe są niepotrzebne, gdy używasz rsync lub lftp:  sprawdzanie raczej należy do nich, nie do basha. Popróbuj na razie ściągnąć z jakiegoś serwera FTP coś istniejącego i coś nieistniejącego, patrząc co wyjdzie.

Mam w tej chwili trochę własnej robótki, więc nie zajmę się szczegółowo problemem. Może coś jeszcze wyedytuję w tym poście.

Ed: może po prostu tak być, że jeśli okaże się że plik nie istnieje, to rsync niczego nie robi i koniec problemu. Ale sprawdź to :)

danket

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #5 dnia: 2008-01-14, 19:28:13 »
Ok, wielkie dzięki za naprowadzenie mnie. Tak, wiem, że test -e tylko na lokalnych działa, chciałem po prostu jak najjaśniej przedstawić problem, dlatego użyłem slowa teoretycznie :)
Pobawię się z lftp, chyba będzie "najbardziejszy" do moich potrzeb, bardziej niż rsync. Patrzyłem też na rcp, ale on z kolei nie obsługuje haseł :/
Tak czy siak - dzięki. Jak to rozwiąże, wrzuce co wydumałem :)
danket

chmooreck

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #6 dnia: 2008-01-14, 20:51:53 »
zawsze możesz pod'mount'ować to za pomocą ftpfs i sprawdzić normalnie przez -e

halish

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #7 dnia: 2008-01-14, 20:54:09 »
szybciej będzie chyba to zrobić w pythonie.

z tego co widziałem, ftplib (dostępny oczywiście standardowo w pythonie) sprowadza się do jednego obiektu: FTP, w którym przekazujesz parametry połączenia. funkcja nlst() pobiera listę plików, potem już tylko pobieranie.

arctgx

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #8 dnia: 2008-01-14, 22:53:49 »
Gdyby Twój plik był jedynym w katalogu, wystarczyłoby polecenie w rodzaju

lftp -e 'mirror ftp://193.219.28.2/pub/linux/debian/pool/main/a/aufs; quit'
- jedynym, bo polecenie to ściąga wszystko z podanego katalogu, jeśli bieżący jest pusty, lub nowszymi wersjami nadpisuje. Jeśli wykonasz je drugi raz, a nic się w obu katalogach nie zmieni, sprawdzi ono tylko zawartości obu katalogów i zakończy działanie.

xavery

  • Gość
[bash] Sprawdzanie czy plik istnieje na maszynie zdalnej
« Odpowiedź #9 dnia: 2008-01-15, 12:18:32 »
Dorzucę jeszcze:
ncftpls ftp://serwer/plik/na/serwerze
Jak nie ma pliku to zwracany jest pusty napis. Można także podać globy shellowe.
Za pomocą wget też na pewno da się to zrobić ale dla mnie wget jest za bardzo rozbudowany:). Niedawno był tu podobny problem i ktoś go pięknie rozwiązał właśnie za pomocą wget.