Obecnie RSyncuję tylko następujące elementy Directories
:
* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html
Więc jak mam rsync
jednego pliku podobnego /var/www/public_html/.htaccess
?
Odpowiedzi:
Robisz to w taki sam sposób, jak w przypadku katalogu, ale jako źródło określasz pełną ścieżkę do nazwy pliku. W twoim przykładzie:
rsync -avz --progress /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
Jak wspomniano w komentarzach: ponieważ -a
zawiera recurse , jedna mała literówka może spowodować rozpoczęcie pełnego transferu drzewa katalogów, więc bardziej niezawodnym podejściem może być po prostu użycie go -vz
lub zastąpienie go -lptgoD
.
Podstawowa składnia
rsync options source destination
Przykład
rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html
Odpowiedź Michaela Place działa świetnie, jeśli względem katalogu głównego zarówno źródła, jak i celu, wszystkie katalogi w ścieżce pliku już istnieją.
Ale co, jeśli chcesz zsynchronizować plik z tą ścieżką źródłową:
/ source-root / a / b / plik
do pliku z następującą ścieżką docelową:
/ target-root / a / b / plik
a katalogi a i b nie istnieją?
Musisz uruchomić polecenie rsync, takie jak następujące:
rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
Do tej pory dwie odpowiedzi nie są całkiem poprawne, otrzymają więcej niż jeden plik, a drugi nie jest tak prosty, jak mógłby być, oto prostsza odpowiedź IMO.
Poniższe polecenie pobiera dokładnie jeden plik, ale musisz utworzyć katalog dest za pomocą mkdir. To prawdopodobnie najszybsza opcja:
mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
Jeśli w katalogu / remote / path jest tylko jedno wystąpienie pliku, rsync może utworzyć katalogi, jeśli wykonasz następujące czynności. Prawdopodobnie zajmie to trochę więcej czasu, ponieważ przeszukuje więcej katalogów. Dodatkowo stworzy puste katalogi dla katalogów w / remote / path, których nie ma w ./local
cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
Pamiętaj, że liczy się kolejność - uwzględnij i - wyklucz.