Tengo alrededor de 50 archivos en varios subdirectorios que me gustaría enviar a un servidor remoto. Pensé que rsync podría hacer esto por mí usando la opción --include-from. Sin la opción --exclude = "*", todos los archivos del directorio se sincronizan, con la opción, no hay archivos.
rsync -avP -e ssh --include-from=deploy/rsync_include.txt --exclude=* ./ [email protected]:/var/www/ --dry-run
Lo estoy ejecutando como seco inicialmente y 0.0.0.0 obviamente se reemplaza por la IP del servidor remoto. El contenido de rsync_include.txt es una nueva lista separada por líneas de rutas relativas a los archivos que quiero cargar.
¿Hay una mejor manera de hacer esto que se me escape un lunes por la mañana?
rsync --files-from
probablemente sea una solución más fácil y confiable :)Hay una bandera
--files-from
que hace exactamente lo que quieres. Deman rsync
:fuente
rsync -av --files-from=file-list . target/
para copiar archivos del directorio actual.The filenames that are read from the FILE are all relative to the source dir
...
rsync, parece ignorar el..
mensaje que me da un error comorsync: link_stat "/home/michael/test/subdir/test.txt" failed: No such file or directory
(en este caso, ejecutar desde el directorio "test" e intentar especificar "../subdir/test.txt" que sí existe.--files-from
puede combinar el argumento con una lista explícita de incluye y excluye, y los archivos de la lista agregados con--files-from
anularán las reglas de exclusión existentes, de modo que se incluyan si aparecen en el archivo?--files-from=
El parámetro necesita una barra diagonal si desea mantener intacta la ruta absoluta. Entonces su comando se convertiría en algo como a continuación:Esto podría hacerse como si hubiera una gran cantidad de archivos y desea copiar todos los archivos a la ruta x. Entonces, buscaría los archivos y arrojaría la salida a un archivo como el siguiente:
fuente
Para el registro, ninguna de las respuestas anteriores ayudó excepto una. Para resumir, puede realizar la operación de copia de seguridad
--files-from=
utilizando:O
El primer comando se explica por sí mismo, al lado del contenido del archivo
rsync-src-files
que detallaré a continuación. Ahora, si desea utilizar la última versión, debe tener en cuenta las siguientes cuatro observaciones:--files-from
y el directorio de origen--recursive
.rsync-src-files
es un archivo creado por el usuario y se colocó dentro del directorio src para esta pruebarsyn-src-files
contienen los archivos y carpetas a copiar y que se toman en relación con el directorio de origen. IMPORTANTE: asegúrese de que no haya espacios al final ni líneas en blanco en el archivo. En el siguiente ejemplo, solo hay dos líneas, no tres (descúbrelo por casualidad). El contenido dersynch-src-files
es:folderName1
folderName2
fuente
Obtuve una tarea similar: rsync todos los archivos modificados después de la fecha dada, pero excluyendo algunos directorios. Era difícil construir un estilo liner todo en uno, así que me sumergí en el problema en piezas más pequeñas. Solución final:
Primero utilizo
find -L ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS"
. Intenté agregarregex
a lafind
línea para excluir los patrones de nombre, sin embargo, mi sabor de Linux (Mint) parece no entender negar regex enfind
. Intenté varios sabores de expresiones regulares; no funcionan como se desea. Así que termino con unaegrep -v
opción que excluye el patrón de manera fácil. Mirsync
no está copiando directorios como /.cache o /.config más algunos otros que nombré explícitamente.fuente
bash
sola línea:rsync -v --files-from=<(find ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS" | grep -Ev "/\..|Downloads|FOO") ~/sourceDIR /Destination
Sintaxis:
rsync <file_/_folder_list> <source> <target>
Los nombres de las carpetas (aquí, CON un final
/
; por ejemploCancer - Evolution/
) están en un archivo de lista de carpetas (por ejemplo: cm_folder_list_test):Si no los incluye al final
/
, se crean las carpetas de destino rsync'd, pero están vacías.Estos nombres de carpeta se añaden al resto de su ruta (
/home/victoria/Mail/2_RESEARCH - NEWS
), proporcionando así la ruta completa de la carpeta a rsync; por ejemplo:/home/victoria/Mail/2_RESEARCH - NEWS/Cancer - Evolution/
.Tenga en cuenta que también debe usar
--files-from=
..., NO--include-from=
...rsync -aqP --delete --files-from=/mnt/Vancouver/projects/ie/claws/data/cm_folder_list_test "/home/victoria/Mail/2_RESEARCH - NEWS" $IN/
(En mi script BASH, definí la variable de la
$IN
siguiente manera).Opciones de rsync utilizadas:
fuente
Esta respuesta no es la respuesta directa a la pregunta. Pero debería ayudarlo a descubrir qué solución se adapta mejor a su problema.
Al analizar el problema debes activar la opción de depuración
-vv
Luego, rsync generará qué archivos se incluyen o excluyen mediante qué patrón:
fuente
Ninguna de estas respuestas funcionó para mí, cuando todo lo que tenía era una lista de directorios . ¡Entonces me topé con la solución! Usted tiene que agregar
-r
a--files-from
porque-a
no va a ser recursiva en este escenario (que sabía ?!).fuente