Pobieranie pliku z FTP za pomocą cURL


20

Próbuję użyć polecenia cURL, aby pobrać plik z serwera FTP na dysk lokalny na moim komputerze. próbowałem

curl " ftp: // myftpsite " - nazwa użytkownika: hasło -Q "CWD / users / myfolder /" -O "myfile.raw"

Ale zwraca błąd, który mówi:

curl: nazwa zdalnego pliku nie ma długości!
curl: spróbuj „curl --help” lub „curl --manual”, aby uzyskać więcej informacji
curl: (6) Nie można rozpoznać hosta: mój_plik.raw; Brak rekordu danych żądanego typu

Próbowałem innych metod, ale wydaje się, że nic nie działa.

Nie jestem też pewien, jak określić, do którego folderu chcę pobrać plik. Jak mam to zrobić?

Odpowiedzi:


26

Próbować

curl -u user:password 'ftp://mysite/%2fusers/myfolder/myfile/raw' -o ~/Downloads/myfile.raw

W adresach URL FTP ścieżka jest względna do katalogu początkowego (zwykle jest to katalog domowy). Musisz podać ścieżkę bezwzględną, a to oznacza użycie %2fdo określenia /. Jest to konieczne, ponieważ ścieżka w ftp:adresach URL jest traktowana jako lista nazw rozdzielanych ukośnikiem , z których każda powinna być przypisana osobnemu CWDpoleceniu. %2fJest dekodowany po podziału. Zobacz RFC 1738 i adresy URL FTP .

Jeśli chodzi o lokalizację wyjściową, po prostu podaj ścieżkę do -o.


Sugestie bezpieczeństwa:

  • Nie wpisuj swojego hasła w adresie URL. Przechowywanie go również ~/.netrcnie jest szczególnie bezpieczne, ale przynajmniej jest przed nim ukryte ps -ef.

  • Twoje hasło jest wysyłane zwykłym tekstem. Jeśli serwer to obsługuje, użyj curl --ssl-reqdlubcurl ftps://mysite/...

  • Korzystanie z SFTP (protokołu przesyłania plików SSH) byłoby jeszcze lepsze.


Działa świetnie. Nie jestem pewien, czy w pełni rozumiem, w jaki sposób używany jest% 2f, ponieważ ty także używasz /, ale hej, to działa, więc nie będę narzekać. Dzięki za pomoc!
Josiah

1
@Josiah: Wydaje się, że adres URL „ścieżka” jest podzielona przez /, a każdy argument jest wysyłany z CWDpoleceniem: %2fusers/myfolderjak CWD /users, CWD myfolder. Zobacz RFC 1738 na ten temat.
user1686

2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Używam tego cały czas. To działa jak urok.


1
Czy jako pierwszy zauważyłem, że ta odpowiedź jest nieprawidłowa? Parametr -T oznacza „przesyłanie pliku”, podczas gdy OP poprosił o „pobranie pliku”
Kar.ma

0

Próbować:

curl "ftp://user:password@myftpsite/users/myfolder/myfile.raw"

(Jeśli nazwa zdalnego pliku to „mój_plik.raw”)


Gdy próbuję, pojawia się następujący błąd: „curl: (9) Serwer odmówił przejścia do podanego katalogu”. Uważam, że dlatego musiałem użyć polecenia -Q „CWD”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.