Odpowiedzi:
Możesz do tego użyć rsync
. rsync
jest naprawdę zaprojektowany do tego typu operacji.
Składnia:
rsync -avh /source/path/ host:/destination/path
lub
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Kiedy uruchomisz go po raz pierwszy, skopiuje całą zawartość, a następnie skopiuje tylko nowe pliki.
Jeśli musisz tunelować ruch przez połączenie SSH (na przykład w celu zachowania poufności), jak wskazano pierwotnie, prosząc o rozwiązanie oparte na SCP, po prostu dodaj -e ssh
do parametrów rsync
. Na przykład:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "To przeniesie wszystkie pliki pasujące do wzorca * .c z bieżącego katalogu do katalogu src na komputerze foo. Jeśli którykolwiek z plików już istnieje w systemie zdalnym, to rsync remote- protokół aktualizacji służy do aktualizacji pliku, wysyłając tylko różnice ”
rsync -avuzh /source/path/ host:/destination/path
. Wykonuje całą pracę w jednym poleceniu, a przy kolejnych wywołaniach przesyła tylko pliki, które tego potrzebują.
Jeśli chcesz trzymać się SCP z jakiegokolwiek powodu, można usunąć w uprawnieniach na lokalnym danych (jeśli masz prawo to zrobić) i SCP nie będzie go dotknąć. Być bardziej dokładnym:
chmod a-w local/*.tar.gz
(w twoim lokalnym reż.)scp remote/*.tar.gz local
Nie jest to zbyt wydajne, miłe, ale może pomóc, jeśli potrzebujesz szybkiego tymczasowego rozwiązania bez zmiany na coś innego niż scp. (Kudos: scp bez zastępowania istniejących plików w miejscu docelowym )
Nie było dokładnej odpowiedzi, jak to zrobić za pomocą SCP, ponieważ takie było pierwotne pytanie.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Po zakończeniu kopiowania plików zmień uprawnienia z powrotem:
sudo chmod a+w -R /files
--ignore-existing
naprawdę jest wymagany?