Nowe posty

Autor Wątek: porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp  (Przeczytany 2936 razy)

chuck007

  • Gość
Witam,
Musze napisać skrypt, który porówna rozmiar tego samego pliku na ftp i lokalnym komputerze i jeśli plik na lokalnym komputerze jest mniejszy to zastąpi go tym z ftp. Problemem jest jak zapisać pod zmienna rozmiar pliku znajdującego się na ftp aby później mieć możliwość porównania przez instrukcje if. Mógłby ktoś pomóc?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #1 dnia: 2014-07-06, 11:56:10 »
curl --silent --head "ftp://${USER}@${HOST}:${PASSWORD}/${FILE}"
Wynik obrobić pod kątem "Content-Length" za pomocą grep-a i cut-a, awk-a, czy czegokolwiek innego.

Można też ręcznie poleceniami expect i ftp, ale to dużo bardziej upierdliwe.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #2 dnia: 2014-07-06, 11:57:40 »
Test na 30MB pliku:
curl --silent --head "ftp://download.nvidia.com/XFree86/Linux-x86/340.17/NVIDIA-Linux-x86-340.17.run"

chuck007

  • Gość
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #3 dnia: 2014-07-06, 14:43:45 »
Ok dzięki. Odnośnie tej komendy curl to można ją używać niezależnie jaki system jest na serwerze ftp? Bo jak testuję ją na serwerze ftp gdzie systemem jest Windows_NT to komenda nic nie wyświetla:(.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #4 dnia: 2014-07-06, 15:04:21 »
curl to tylko opakowanie na różne protokoły sieciowe, w tym STANDARD FTP.
Być może ten windowsowy pseudo-serwerek nie obsługuje poprawnie komend FTP, w tym komendy SIZE.

Spróbuj za pomocą zwykłego polecenia ftp (takie samo jest nawet w windowsie) połączyć się z tym serwerem, przejść do odpowiedniego katalogu i za pomocą polecenia SIZE sprawdzić czy zwróci poprawnie rozmiar:
$ ftp download.nvidia.com
Connected to 32940.ftp.download.akadns.net.
220 spftp/1.0.0000 Server [77.67.22.188]

Name (download.nvidia.com): anonymous
331 Password required for USER.

Password: {ENTER}
230-
230- ---------------------------------------------------------------------------
230- WARNING:  This is a restricted access system.  If you do not have explicit
230-           permission to access this system, please disconnect immediately!
230 ----------------------------------------------------------------------------
Remote system type is UNIX.

ftp> cd XFree86/Linux-x86/340.17
250 CWD command successful.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /XFree86/Linux-x86/340.17.
-rw-rw-r--   1     1994     1994 38525211 Jun  4 22:35 NVIDIA-Linux-x86-340.17.run
-rw-rw-r--   1     1994     1994       61 Jun  9 17:28 NVIDIA-Linux-x86-340.17.run.md5
-rw-rw-r--   1     1994     1994       93 Jun  9 17:28 NVIDIA-Linux-x86-340.17.run.sha256
drwxrwxr-x   1     1994     1994        0 Jun  9 17:30 README
226 Transfer Complete

ftp> size NVIDIA-Linux-x86-340.17.run
213 38525211

ftp> bye
221 Goodbye.
Jeśli polecenie size, zamiast rozmiaru w bajtach poprzedzonego kodem potwierdzenia 213, zwróci błąd, to będzie wiadomo co jest nie tak.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #5 dnia: 2014-07-06, 15:18:56 »
Zmusiłem się do połączenia z nikczemną domeną microsoft.com:

$ ftp ftp.microsoft.com
Connected to ftp.microsoft.akadns.net.
220 Microsoft FTP Service

Name (ftp.microsoft.com): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.

Password: {ENTER}
230-Welcome to FTP.MICROSOFT.COM. Also visit http://www.microsoft.com/downloads.
230 User logged in.
Remote system type is Windows_NT.

ftp> ls
200 PORT command successful.
125 Data connection already open; Transfer starting.
04-28-10  07:21PM      
         bussys
04-28-10  10:17PM      
         deskapps
04-28-10  11:14PM      
         developr
04-28-10  11:15PM      
         KBHelp
04-28-10  11:15PM      
         MISC
04-29-10  06:54AM      
         MISC1
04-29-10  08:47AM      
         peropsys
04-29-10  05:10PM      
         Products
04-29-10  05:13PM                PSS
04-29-10  05:22PM                ResKit
04-29-10  07:51PM                Services
04-30-10  08:37AM                Softlib
226 Transfer complete.

ftp> cd MISC
250 CWD command successful.

ftp> ls
200 PORT command successful.
125 Data connection already open; Transfer starting.
04-28-10  11:15PM                beckyk
04-08-94  06:13PM                15749 CBCP.TXT
04-28-10  11:15PM                csformat
04-28-10  11:15PM                DAILYKB
04-12-93  05:30PM                  710 DISCLAIM.TXT
04-28-10  11:15PM                FDC
04-28-10  11:15PM                friKB
04-28-10  11:15PM                FULLKB
04-28-10  11:15PM                Homenet
09-28-93  11:31AM                   97 INDEX.TXT
04-28-10  11:15PM                Jeffreyf
04-28-10  11:15PM                KB
04-28-10  11:15PM                KBSPV
04-28-10  11:15PM                Markesh
04-28-10  11:15PM                monKB
09-28-93  03:11PM                30638 NBFCP.TXT
11-16-93  12:04PM                25423 NBFCP2.TXT
11-16-93  12:06PM                24059 NBFCP3.TXT
12-21-93  02:15PM                26294 NBFCP4.TXT
02-14-94  06:07PM                29097 NBFCP5.TXT
04-28-10  11:15PM                Peach
12-07-98  05:46AM                 8698 PRODUCT.TBL
01-26-10  02:55PM                  907 README ? KB PENDING SHUTDOWN.txt
04-28-10  11:15PM                satKB
04-28-10  11:15PM                Store
04-28-10  11:15PM                STORE1
04-28-10  11:15PM                sunKB
04-28-10  11:15PM                test
04-28-10  11:15PM                thuKB
09-30-93  06:20AM                 6945 TREE.COM
04-28-10  11:15PM                tueKB
04-28-10  11:15PM                wedKB
226 Transfer complete.

ftp> size NBFCP.TXT
213 30638

ftp> bye
221 Thank you for using Microsoft products.
$ curl --silent --head "ftp://ftp.microsoft.com/MISC/NBFCP.TXT"
Last-Modified: Tue, 28 Sep 1993 22:11:23 GMT
Content-Length: 30638
Accept-ranges: bytes
>Remote system type is Windows_NT.
>213 30638
>Content-Length: 30638

Jak widać przynajmniej ten windowsowy serwer FTP działa.
Choć zamiast ładnie się pożegnać, to wysyła jakiś marketingowy bełkot, do tego niezgodny z prawdą, bo żadnych ich produktów nie używam...

chuck007

  • Gość
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #6 dnia: 2014-07-06, 16:56:11 »
Cytat: ultr
curl to tylko opakowanie na różne protokoły sieciowe, w tym STANDARD FTP.
Być może ten windowsowy pseudo-serwerek nie obsługuje poprawnie komend FTP, w tym komendy SIZE.

Spróbuj za pomocą zwykłego polecenia ftp (takie samo jest nawet w windowsie) połączyć się z tym serwerem, przejść do odpowiedniego katalogu i za pomocą polecenia SIZE sprawdzić czy zwróci poprawnie rozmiar:
$ ftp download.nvidia.com
Connected to 32940.ftp.download.akadns.net.
220 spftp/1.0.0000 Server [77.67.22.188]

Name (download.nvidia.com): anonymous
331 Password required for USER.

Password: {ENTER}
230-
230- ---------------------------------------------------------------------------
230- WARNING:  This is a restricted access system.  If you do not have explicit
230-           permission to access this system, please disconnect immediately!
230 ----------------------------------------------------------------------------
Remote system type is UNIX.

ftp> cd XFree86/Linux-x86/340.17
250 CWD command successful.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /XFree86/Linux-x86/340.17.
-rw-rw-r--   1     1994     1994 38525211 Jun  4 22:35 NVIDIA-Linux-x86-340.17.run
-rw-rw-r--   1     1994     1994       61 Jun  9 17:28 NVIDIA-Linux-x86-340.17.run.md5
-rw-rw-r--   1     1994     1994       93 Jun  9 17:28 NVIDIA-Linux-x86-340.17.run.sha256
drwxrwxr-x   1     1994     1994        0 Jun  9 17:30 README
226 Transfer Complete

ftp> size NVIDIA-Linux-x86-340.17.run
213 38525211

ftp> bye
221 Goodbye.
Jeśli polecenie size, zamiast rozmiaru w bajtach poprzedzonego kodem potwierdzenia 213, zwróci błąd, to będzie wiadomo co jest nie tak.
Wykonuje podobnie jak Ty w załączonym przez Ciebie kodzie. Tyle że jak wklepuje polecenie ls to dostaje tylko
200 PORT command successful.
150 Opening ASCII mode data connection for /XFree86/Linux-x86/340.17
i nie wiem czemu nie wyświetla mi listy plików. Czyżby coś u mnie w systemie było zrąbane?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
porównanie rozmiaru pliku na lokalnym komputerze i serwerze ftp
« Odpowiedź #7 dnia: 2014-07-06, 22:09:12 »
> i nie wiem czemu nie wyświetla mi listy plików. Czyżby coś u mnie w systemie było zrąbane?

Na FTPie nVidii też mi tak działa dla katalogu / - widać jego listowanie jest zabronione:
$ ftp download.nvidia.com
Connected to 32940.ftp.download.akadns.net.
220 spftp/1.0.0000 Server [213.248.114.243]

Name (download.nvidia.com): anonymous
331 Password required for USER.

Password:
230-
230- ---------------------------------------------------------------------------
230- WARNING:  This is a restricted access system.  If you do not have explicit
230-           permission to access this system, please disconnect immediately!
230 ----------------------------------------------------------------------------
Remote system type is UNIX.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /.
226 Transfer Complete

ftp> cd XFree86
250 CWD command successful.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /XFree86.
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 FreeBSD-x86
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 FreeBSD-x86_64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-32bit-ARM
drwxrwxr-x   1     1994     1994        0 Feb 24 23:26 Linux-ia64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-x86
drwxrwxr-x   1     1994     1994        0 Feb 25 00:51 Linux-x86-64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-x86_64
drwxrwxr-x   1     1994     1994        0 Feb 25 01:05 Quadro_Certified
drwxrwxr-x   1     1994     1994        0 Mar  5 19:26 gpu-hdmi-audio-document
drwxrwxr-x   1     1994     1994        0 Feb 25 01:06 nforce
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-installer
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-modprobe
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-persistenced
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-settings
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-xconfig
drwxrwxr-x   1     1994     1994        0 Sep  5  2012 patches
drwxrwxr-x   1     1994     1994        0 May 30  2012 vdpau
226 Transfer Complete
Możesz też przełączyć się w tryb pasywny:
ftp> passive                                                                                                                                                               
Passive mode on.

ftp> ls
227 Entering Passive Mode. (213,248,114,243,215,206)
150 Opening ASCII mode data connection for /XFree86.
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 FreeBSD-x86
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 FreeBSD-x86_64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-32bit-ARM
drwxrwxr-x   1     1994     1994        0 Feb 24 23:26 Linux-ia64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-x86
drwxrwxr-x   1     1994     1994        0 Feb 25 00:51 Linux-x86-64
drwxrwxr-x   1     1994     1994        0 Jul  4 16:33 Linux-x86_64
drwxrwxr-x   1     1994     1994        0 Feb 25 01:05 Quadro_Certified
drwxrwxr-x   1     1994     1994        0 Mar  5 19:26 gpu-hdmi-audio-document
drwxrwxr-x   1     1994     1994        0 Feb 25 01:06 nforce
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-installer
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-modprobe
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-persistenced
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-settings
drwxrwxr-x   1     1994     1994        0 Jul  4 16:28 nvidia-xconfig
drwxrwxr-x   1     1994     1994        0 Sep  5  2012 patches
drwxrwxr-x   1     1994     1994        0 May 30  2012 vdpau
226 Transfer Complete