Chciałbym przenieść się rsync
z lokalnego komputera na serwer. W katalogu, który nie istnieje i chcę rsync
najpierw utworzyć ten katalog na serwerze.
Jak mogę to zrobić?
Jeśli masz więcej niż ostatni katalog liści do utworzenia, możesz ssh ... mkdir -p
najpierw uruchomić osobny lub użyć --rsync-path
sztuczki, jak wyjaśniono tutaj :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Lub skorzystaj z --relative
opcji sugerowanej przez Tony'ego. W takim przypadku określasz tylko katalog główny miejsca docelowego, który musi istnieć, a nie strukturę katalogów źródła, które zostanie utworzone:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
W ten sposób otrzymasz / pre_existing / dir / new / x / y / z /
Jeśli chcesz, aby utworzono „y / z /”, ale nie wewnątrz „nowego / x /”, możesz dodać miejsce, w ./
którym chcesz --relative
rozpocząć:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
utworzy / pre_existing / dir / y / z /.
mkdir
, więc używam hacka:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
tworzy dodatkowy plik, ale możesz go później usunąć.&&
?Zakładając, że używasz ssh do połączenia rsync, co powiesz przed wysłaniem polecenia ssh:
jeśli już istnieje, nic się nie dzieje
źródło
rsync
braku odpowiedzi.ssh
nie jest obsługiwana irsync
łączy sięrsync daemon
ze zdalnym końcem.Ta
-R, --relative
opcja to zrobi.Na przykład: jeśli chcesz wykonać kopię zapasową
/var/named/chroot
i utworzyć taką samą strukturę katalogów na serwerze zdalnym-R
, zrobisz to.źródło
/./
w ścieżce źródłowej. Zobacz stronę podręcznika po szczegóły.rsync
nie utworzy automatycznie katalogów, jeśli foldery docelowe nie istnieją. Westchnienie.--relative
. Może nie zrobić tego, co myślisz.--relative
w połączeniu z/./
tym, czego będzie szukała większość początkujących.rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
skopiuje zawartość pulpitu na pulpit docelowy. Nie wiem, jak różnice w nazwach użytkowników mogą na to wpłynąć.to zadziałało dla mnie:
Otrzymuję tę wiadomość:
ale nie muszę się martwić, że w pobliżu kręci się pusty katalog.
źródło
Nie sądzę, że możesz to zrobić jednym poleceniem rsync, ale możesz najpierw „wstępnie utworzyć” dodatkowy katalog w następujący sposób:
gdzie „emptydir” to lokalny pusty katalog (który być może trzeba będzie najpierw utworzyć jako katalog tymczasowy).
To trochę hack, ale dla mnie działa.
Twoje zdrowie
Chris
źródło
rsync /dev/null node:existing-dir/new-dir/
sugestię powyżej.Ta odpowiedź zawiera fragmenty innych odpowiedzi, ale miejmy nadzieję, że będzie ona nieco jaśniejsza, jeśli chodzi o okoliczności. Nigdy nie określiłeś, co rsyncujesz - pojedynczy wpis katalogu lub wiele plików.
Załóżmy więc, że przenosisz wpis katalogu źródłowego, a nie tylko przenosisz zawarte w nim pliki.
Powiedzmy, że masz katalog o nazwie lokalnie,
data/myappdata/
a pod nim jest ładunek podkatalogów. Maszdata/
na swojej maszynie docelowej, ale niedata/myappdata/
- to jest dość łatwe:Możesz nawet użyć innej nazwy dla zdalnego katalogu:
Jeśli przenosisz tylko niektóre pliki i nie przenosisz wpisu katalogu, który je zawiera, wykonaj następujące czynności:
i utworzy
myappdata
dla ciebie katalog na zdalnym komputerze, w którym będziesz mógł umieścić swoje pliki. Ponowniedata/
katalog musi istnieć na zdalnym komputerze.Nawiasem mówiąc, używam
-rvv
flagi, aby uzyskać podwójnie rozwlekłe dane wyjściowe, aby było jasne, co robi, a także niezbędne zachowanie rekurencyjne.Chcę tylko pokazać, co otrzymuję podczas korzystania z rsync (3.0.9 na Ubuntu 12.04)
Mam nadzieję, że to trochę wyjaśnia.
źródło
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
ale to, co utworzyło na miejscu docelowym, to / remote / path / to / data / myappdata / myappdata /rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
na przykład:
od: /xxx/a/b/c/d/e/1.html
to: user @ remote: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / user @ remote: / pre_existing / dir /
źródło