Czy mogę scpować folder zawierający podfoldery?

31

Mam folder zawierający pliki dla statycznej witryny internetowej, np .:

/site/index.html
/site/css/css.css
/site/js/js.js
/site/images/...

Jeśli zaktualizuję coś na swoim laptopie, chcę, aby jedno polecenie wysłało pliki na mój serwer Ubuntu. Nie chcę konfigurować na nim FTP, jeśli też nie mam, zastanawiając się, czy scp byłby w stanie to obsłużyć?

Blankman
źródło
Wolę tarprzez ssh: unix.stackexchange.com/a/10028/79839
pisklęta

Odpowiedzi:

56

Polecenie scp -r source user@target:destprzejdzie wszystkie podkatalogi źródła i skopiuje je.

Jednak scpzachowuje się jak cpi zawsze kopiuje pliki, nawet jeśli są takie same zarówno w źródle, jak i miejscu docelowym. [Zobacz tutaj na obejście.]

Ponieważ jest to statyczna strona internetowa, najprawdopodobniej dokonujesz tylko aktualizacji, a nie odtwarzasz całość, więc prawdopodobnie zauważysz, że rzeczy posuwają się szybciej, jeśli używasz rsyncssh zamiast scp. Prawdopodobnie coś takiego

rsync -av -e ssh source user@target:dest

...rozpocząć. Jeśli robisz to w sieci LAN, osobiście skorzystałbym z opcji -avWzamiast rsync.

Rsync daje także możliwość powielania usunięć w twoim źródle; więc jeśli usuniesz plik ze swojego drzewa, możesz uruchomić rsyncjak wyżej i dołączyć flagę, --deletea usunie ten sam plik ze strony docelowej.

David Mackintosh
źródło
9

scp ma flagę rekurencyjną, która zrobi to, co chcesz. scp -r /base/directory user@server:/to/location

z man scp

-r      Recursively copy entire directories.  Note that scp follows symbolic
          links encountered in the tree traversal.
Zypher
źródło
2

scp -r i rsync -r są najbardziej niezawodnymi sposobami na uzyskanie tego, czego chcesz, jak zauważyli inni.

Możesz także użyć sshfs do „zamontowania” go tak, jakby to był dysk lokalny: sshfs user@host:/site /mnt/mountpoint

(Jednak prawdopodobnie lepiej jest pracować lokalnie i wdrażać za pomocą rsync. Kolejne narzędzie, o którym należy pamiętać.)

Luke Schlather
źródło