В настоящее время я использую только RSync, Directories
например:
* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html
Итак, как мне сделать rsync
один файл вроде /var/www/public_html/.htaccess
,?
Ответы:
Вы делаете это так же, как и каталог, но вы указываете полный путь к имени файла в качестве источника. В вашем примере:
rsync -avz --progress /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
Как упоминалось в комментариях: поскольку -a
включает рекурсию , одна небольшая опечатка может привести к запуску полного переноса дерева каталогов, поэтому более надежный подход может просто использовать -vz
или заменить его на -lptgoD
.
Базовый синтаксис
rsync options source destination
пример
rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html
Ответ Майкла Плейса отлично работает, если по отношению к корневому каталогу как для источника, так и для цели все каталоги в пути к файлу уже существуют.
Но что, если вы хотите синхронизировать файл с этим исходным путем:
/ исходный-корень / а / б / файл
в файл со следующим целевым путем:
/ целевой-корень / а / б / файл
а каталоги a и b не существуют?
Вам нужно запустить команду rsync, как показано ниже:
rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
На сегодняшний день два ответа не совсем правильные, они получат более одного файла, а другой не так прост, как мог бы быть, вот более простой ответ, ИМО.
Следующее получает ровно один файл, но вы должны создать каталог назначения с помощью mkdir. Это, наверное, самый быстрый вариант:
mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
Если в / remote / path есть только один экземпляр файла, rsync может создать для вас каталоги, если вы сделаете следующее. Это, вероятно, займет немного больше времени, поскольку выполняется поиск в большем количестве каталогов. Кроме того, он создаст пустые каталоги для каталогов в / remote / path, которых нет в ./local
cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
Имейте в виду, что порядок --include и --exclude имеет значение.