Pregunta :¿Cómo copiar carpetas recursivamente mientras se excluyen carpetas/archivos específicos al usar rsync?
En general, usamos el comando 'cp' para copiar archivos, pero desafortunadamente, el comando 'cp' no tiene la función "excluir", por lo que necesitamos escribir algunos scripts para excluir los archivos no deseados, o podemos usar otra herramienta. rsync'.
Desde la página man del comando rsync:
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
La sintaxis del comando rsync para copiar directorios mientras se excluyen archivos/directorios específicos se muestra a continuación:
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
Por ejemplo, si no queremos copiar todos los archivos de la carpeta de Oracle a Oraclebak excepto 'oracle/oradata/rmanbackup':
$ du -sh oracle/* 40K oracle/extapi 1.1G oracle/oradata ------> sub directory of oracle 4.0K oracle/test1 4.0K oracle/test2 4.0K oracle/test3 4.0K oracle/test4 4.0K oracle/test5
# du -sh oracle/oradata/* 4.0K oracle/oradata/date1 4.0K oracle/oradata/date2 4.0K oracle/oradata/date3 4.0K oracle/oradata/date4 4.0K oracle/oradata/date5 1.1G oracle/oradata/rmanbackup -------> we need to exclude this directory
La ruta de exclusión es la ruta relativa del archivo en 'SRC', p. queremos excluir "oracle/oradata/rmanbackup", y el directorio principal es oracle, por lo que la ruta de exclusión es 'oradata/rmanbackup':
# rsync -r --exclude 'oradata/rmanbackup' oracle/ oraclebak # du -sh oraclebak/oracle/* 40K oraclebak/oracle/extapi 24K oraclebak/oracle/oradata 4.0K oraclebak/oracle/test1 4.0K oraclebak/oracle/test2 4.0K oraclebak/oracle/test3 4.0K oraclebak/oracle/test4 4.0K oraclebak/oracle/test5
También puede usar la opción “–exclude-from=FILE ” si tiene más archivos/directorios para excluir. En ese caso, solo tiene que enumerar los archivos/directorios que se excluirán en un archivo y proporcionar la ruta del archivo a la opción “–exclude-from=”
# man rsync --exclude-from=FILE read exclude patterns from FILE
Por ejemplo:
# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak
Aquí,
/tmp/exclude_list contiene una lista de archivos/directorios que se excluirán mientras se copian los demás.