Odpowiedzi:
Tak, użyj -r:
scp -rp sourcedirectory user@dest:/path
Uwaga: To tworzy sourcedirectorywnętrze, /pathwięc pliki będą w/path/sourcedirectory
-pr(opcje w odwrotnej kolejności) nie skopiują folderów, lecz raczej ich zawartość do katalogu docelowego (najwyraźniej kolejność opcji ma znaczenie).
Chociaż poprzednie odpowiedzi są technicznie poprawne, należy również rozważyć użycie rsynczamiast tego. rsyncporównuje dane po stronie wysyłającej i odbierającej z mechanizmem różnicowym, aby nie musiał ponownie wysyłać danych, które zostały wcześniej wysłane.
Jeśli zamierzasz skopiować coś na zdalne urządzenie więcej niż raz, użyj rsync. W rzeczywistości warto z niego korzystać za rsynckażdym razem, ponieważ ma więcej opcji kontroli takich jak kopiowanie uprawnień do plików i własności oraz wykluczanie niektórych plików lub katalogów. Ogólnie:
$ rsync -av /local/dir/ server:/remote/dir/
zsynchronizuje katalog lokalny ze zdalnym katalogiem. Jeśli uruchomisz go po raz drugi, a zawartość katalogu lokalnego nie ulegnie zmianie, żadne dane nie zostaną przesłane - znacznie wydajniejsze niż uruchamianie scpi kopiowanie wszystkiego za każdym razem.
Ponadto rsyncpozwala bardzo łatwo odzyskać z przerwanych transferów, w przeciwieństwie do scp.
Wreszcie, nowoczesne wersje rsyncdomyślnie działają na ssh, więc jeśli scpjuż działa, rsyncpowinno być prawie zamiennikiem.
rsyncjest bardziej wydajny. Jedną z rzeczy, których obecnie nie scprobi, jest zezwolenie na kopiowanie między zdalnymi hostami (przynajmniej bez uruchamiania klienta rsync na jednym z nich).
-av: v jest dla pełnego, a dla archiwum i jest skrótem do -rlptgoD, co oznacza rekurencyjne, zachowanie dat właściciela i linków. Jeśli chcesz tylko używać rekurencyjnego-r
Opcja kopiowania rekurencyjnego „-r” (małe litery)
scp -r
Które mylę ze zwykłą lokalną opcją kopiowania rekurencyjnego „-R” (wielkie litery)
cp -R
Najlepszym sposobem jest użycie rsync przez SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Moje ulubione opcje to -Pazvessh - usuń:
rsync, których użyłem, użyłyby sshdomyślnie, więc -esshjest mało prawdopodobne, aby były potrzebne. A wybór polecenia służącego do połączenia ze zdalnym hostem nie ma żadnego związku z rekurencyjnym kopiowaniem.
Po szukaniu rekurencyjnej flagi kopiowania i pomyślnym użyciu jej dzięki temu postowi, chciałbym opublikować tylko sugestię.
Jeśli przypadek polega na tym, że kopiujesz (rekurencyjnie) katalog. Może jeśli pliki zostaną wysłane skompresowane, możesz zaoszczędzić czas na przesyłaniu
W końcu zrobiłem:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Mam nadzieję że to pomoże
.tar.gzalbo .tgzponieważ plik jest archiwum tar zzzipowanym (ponieważ -zflaga jest używana).
Za pomocą tego prostego polecenia możesz rekurencyjnie skopiować katalog do skompresowanego archiwum:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Na przykład, aby skopiować zawartość /var/logz domain.comdo ~/logs.tgzciebie uruchom:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Możesz także wyodrębnić pliki w systemie docelowym za pomocą potoków. To polecenie skopiuje zawartość /var/logat domain.comdo ~/destination/logw twoim systemie:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Chociaż do wykonania kopii lustrzanej katalogu, prawdopodobnie powinieneś użyć rsync...
Jeśli wolisz przekazać hasło użytkownika jako parametr zamiast wprowadzać je interaktywnie, możesz użyć sshpass( sudo apt-get install -y sshpass).
Przykład:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Opcji -r można użyć z poleceniem scp, aby rekursywnie kopiować katalogi w dowolnym systemie. Jeśli potrzebujesz czegoś innego, zapoznaj się z samouczkiem polecenia scp . Opcja -r oznacza operację rekurencyjną w większości poleceń Linuksa.
-ropcja została już zasugerowana lata temu i jest przyjętą odpowiedzią.
Inną (prawdopodobnie lepszą do wielokrotnego użytku) opcją jest użycie NFS - sprawdź serwer jądra nfs i jak skonfigurować udziały NFS.
scpale NFS nie jest opcją.