Jak przesłać wiele folderów na inny serwer za pomocą mput w Uniksie?

18

Jestem zalogowany na serwerze (za pomocą Putty). stamtąd łączę się za pomocą FTP z innym serwerem. Chcę skopiować kilka folderów z pierwszego serwera na drugi serwer za pomocą mput.

Lubić:

ftp> mput folder1 folder2 folder3

Ale dostaję „folder1: nie zwykły plik.” ... i tak dalej. Każdy z tych folderów ma podfoldery, pliki (niektóre binarne, inne nie).

Jak mogę osiągnąć to, czego chcę, bez spakowywania plików i przesyłania?

7ochem
źródło

Odpowiedzi:

19

Wiersz poleceń FTP jest dość prymitywny.

Nie można rekurencyjnie wysyłać plików / folderów do zdalnej witryny.

Jeśli chcesz odtworzyć strukturę katalogów po stronie zdalnej tak samo jak lokalną, musisz ręcznie mkdirkażdą ścieżkę i użyć, mput *aby wysłać wszystko w tym katalogu do strony zdalnej.

Dwie opcje, aby to ułatwić:

  1. Przestań używać pierwotnej komendy FTP (ncftp jest dobrą alternatywą)

  2. Użyj tar, aby uporządkować foldery, wysłać plik i rozpakować go z drugiej strony.

Philip Reynolds
źródło
1
+1 dla tar-> put-> untar
dave
1
-1 Ponieważ pytanie brzmi: „Jak mogę osiągnąć to, co chcę, bez spakowania plików i przesłania?”, Co oznacza, że ​​dana osoba nie ma dostępu do powłoki na zdalnym komputerze.
Steen Schütt
11

Nie jest to możliwe w przypadku zwykłego programu ftp, ponieważ mput nie używa rekurencji. Możesz użyć ncftp, a następnie wywołać „folder mput -r”.

Najlepsze życzenia, Fabian

halfdan
źródło
To właśnie zrobiłem ostatnio na pudełku RHEL 5. W pakiecie EPEL plik wykonywalny nosi nazwę ncftpput.
Suppressingfire,
Nie można nic zmienić w konfiguracji serwera. Jestem tylko użytkownikiem ...
To zależy od twojego klienta. Nie na serwerze.
halfdan
Wolę to robić w ten sposób. Dziękuję Ci.
Mojtaba Rezaeian
11

Zrobiłem skrypt bash:

#!/bin/bash
ftp_site=ftp.yoursite.net
username=my_user_name
passwd=my_password
remote=/path/to/remote/folder
folder=$1
cd /path/to/local/folder/$folder
pwd
ftp -in <<EOF
open $ftp_site
user $username $passwd
mkdir $remote/$folder
cd $remote/$folder
mput *
close
bye

i nazwał to z

find . -type d -exec ./recursive-ftp.sh {} \;

wydaje się działać.

Stein Åsmul
źródło
0

Bezpieczne kopiowanie scp ma flagę rekurencyjną -r, która może okazać się przydatna.

Michael
źródło
Pytanie dotyczy prostego dostępu do ftp ... nie scp / sftp!
Mojtaba Rezaeian
-1

otwórz cd programu PowerShell w katalogu, który chcesz załadować, uruchom następujące polecenia:

1. gci -r | % {if ($_.PSIsContainer) {$t = $((($_.fullname -split "\\")[$(((pwd) -split "\\").length)..200]) -join "/"); "mkdir ""$t""`r`nmput ""$t/*"" ""$t"""}} | sc .\mput_all
2. notepad .\mput_all

Wklej wyniki do okna ftp. Cieszyć się. Nie zapomnij również dodać mput *, aby przenieść wszystkie pliki z katalogu podstawowego.

Dowiedz się PowerShell
źródło
6
Od kiedy PowerShell działa w systemie Unix?
Michael Hampton