usar opciones como comando linux unix rsync darwin

opciones - como usar el comando rsync en linux



Usar Rsync para incluir y excluir opciones para incluir directorio y archivo por patrĂ³n (3)

Agregue -m a la respuesta recomendada anterior para eliminar directorios vacíos.

Estoy teniendo problemas para obtener mi sintaxis de rsync correcta y me pregunto si mi escenario se puede manejar con rsync. En primer lugar, he confirmado que rsync funciona perfectamente entre mi host local y mi host remoto. Hacer una sincronización directa en un directorio es exitoso.

Así es como se ve mi sistema de archivos:

uploads/ 1260000000/ file_11_00.jpg file_11_01.jpg file_12_00.jpg 1270000000/ file_11_00.jpg file_11_01.jpg file_12_00.jpg 1280000000/ file_11_00.jpg file_11_01.jpg file_12_00.jpg

Lo que quiero hacer es ejecutar rsync solo en los archivos que comienzan con "file_11_" en los subdirectorios y quiero poder ejecutar solo un trabajo de rsync para sincronizar todos estos archivos en los subdirectorios.

Aquí está el comando que estoy intentando:

rsync -nrv --include="**/file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

Esto da como resultado que se marquen 0 archivos para transferirlos en mi ejecución en seco. Probé varias otras combinaciones de sentencias --include y --exclude, pero continué sin obtener resultados o obtuve todo como si no se hubieran establecido opciones de inclusión o exclusión.

Alguien tiene alguna idea de cómo hacer esto?


El problema es que --exclude="*" dice que se excluye (por ejemplo) el directorio 1260000000/ , por lo que rsync nunca examina el contenido de ese directorio, por lo que nunca se da cuenta de que el directorio contiene archivos que tu --include .

Creo que lo más parecido a lo que quieres es esto:

rsync -nrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(que incluirá todos los directorios, y todos los archivos que coincidan con file_11*.jpg , pero no otros archivos), o tal vez esto:

rsync -nrv --include="/[0-9][0-9][0-9]0000000/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(mismo concepto, pero mucho más exigente con los directorios que incluirá).


rsync incluye excluir ejemplos de patrones:

"*" means everything "dir1" transfers empty directory [dir1] "dir*" transfers empty directories like: "dir1", "dir2", "dir3", etc... "file*" transfers files whose names start with [file] "dir**" transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc... "dir***" same as above "dir1/*" does nothing "dir1/**" does nothing "dir1/***" transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc...

Y la nota final es que simplemente no confíe en los asteriscos que se usan al principio para evaluar rutas; como "**dir" (está bien usarlos para carpetas individuales o archivos pero no rutas) y tenga en cuenta que más de dos asteriscos no funcionan para nombres de archivos.