Actualmente solo RSync-ing Directories
como:
* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html
Entonces, ¿cómo hago para rsync
un solo archivo /var/www/public_html/.htaccess
?
Respuestas:
Lo hace de la misma manera que lo haría con un directorio, pero especifica la ruta completa al nombre del archivo como fuente. En tu ejemplo:
rsync -avz --progress /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
Como se mencionó en los comentarios: dado que -a
incluye recurse , un pequeño error tipográfico puede hacer que inicie una transferencia completa del árbol de directorios, por lo que un enfoque más infalible podría simplemente usarlo -vz
o reemplazarlo -lptgoD
.
La respuesta de Michael Place funciona muy bien si, en relación con el directorio raíz tanto para el origen como para el destino, todos los directorios en la ruta del archivo ya existen.
Pero, ¿qué sucede si desea sincronizar un archivo con esta ruta de origen?
/ source-root / a / b / archivo
a un archivo con la siguiente ruta de destino:
/ target-root / a / b / archivo
y los directorios a y b no existen?
Necesita ejecutar un comando rsync como el siguiente:
rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
Hasta la fecha, dos de las respuestas no son del todo correctas, obtendrán más de un archivo y el otro no es tan simple como podría ser, aquí hay una respuesta más simple en mi opinión.
Lo siguiente obtiene exactamente un archivo, pero debe crear el directorio dest con mkdir. Esta es probablemente la opción más rápida:
mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
Si solo hay una instancia de archivo en / remote / path, rsync puede crear directorios por usted si hace lo siguiente. Esto probablemente llevará un poco más de tiempo porque busca en más directorios. Además, creará directorios vacíos para directorios en / remote / path que no están en ./local
cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
Tenga en cuenta que el orden de --incluir y --excluir importa.