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.