Odpowiedzi:
Tak, użyj -r
:
scp -rp sourcedirectory user@dest:/path
Uwaga: To tworzy sourcedirectory
wnętrze, /path
wię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 rsync
zamiast tego. rsync
poró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 rsync
każ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 scp
i kopiowanie wszystkiego za każdym razem.
Ponadto rsync
pozwala bardzo łatwo odzyskać z przerwanych transferów, w przeciwieństwie do scp
.
Wreszcie, nowoczesne wersje rsync
domyślnie działają na ssh, więc jeśli scp
już działa, rsync
powinno być prawie zamiennikiem.
rsync
jest bardziej wydajny. Jedną z rzeczy, których obecnie nie scp
robi, 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 ssh
domyślnie, więc -essh
jest 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.gz
albo .tgz
ponieważ plik jest archiwum tar zzzipowanym (ponieważ -z
flaga 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/log
z domain.com
do ~/logs.tgz
ciebie 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/log
at domain.com
do ~/destination/log
w 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.
-r
opcja 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.
scp
ale NFS nie jest opcją.