Obecnie mogę skopiować tylko jeden .tar
plik. Ale w jaki sposób mogę rekurencyjnie kopiować katalogi scp
?
572
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ć zarsync
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: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 doscp
.Wreszcie, nowoczesne wersje
rsync
domyślnie działają na ssh, więc jeśliscp
już działa,rsync
powinno być prawie zamiennikiem.źródło
rsync
jest bardziej wydajny. Jedną z rzeczy, których obecnie niescp
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
Po to jest
-r
opcja. :)Zobacz stronę podręcznika użytkownika scp, aby uzyskać więcej informacji w razie potrzeby.
źródło
Opcja kopiowania rekurencyjnego „-r” (małe litery)
Które mylę ze zwykłą lokalną opcją kopiowania rekurencyjnego „-R” (wielkie litery)
źródło
Najlepszym sposobem jest użycie rsync przez SSH
Moje ulubione opcje to -Pazvessh - usuń:
źródło
rsync
, których użyłem, użyłybyssh
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:
Mam nadzieję że to pomoże
źródło
.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:
Na przykład, aby skopiować zawartość
/var/log
zdomain.com
do~/logs.tgz
ciebie uruchom:Możesz także wyodrębnić pliki w systemie docelowym za pomocą potoków. To polecenie skopiuje zawartość
/var/log
atdomain.com
do~/destination/log
w twoim systemie:Chociaż do wykonania kopii lustrzanej katalogu, prawdopodobnie powinieneś użyć
rsync
...źródło
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:
źródło
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ódło
-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.
źródło
scp
ale NFS nie jest opcją.