Question :Comment copier des dossiers de manière récursive tout en excluant des dossiers/fichiers spécifiques lors de l'utilisation de rsync ?
En général, nous utilisons la commande 'cp' pour copier des fichiers, mais malheureusement, la commande 'cp' n'a pas la fonction "exclure", nous devons donc écrire des scripts pour exclure les fichiers indésirables, ou nous pouvons utiliser un autre outil ' rsync'.
À partir de la page de manuel de la commande rsync :
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
La syntaxe de la commande rsync pour copier des répertoires tout en excluant des fichiers/répertoires spécifiques est la suivante :
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
Par exemple, si nous ne voulons pas copier tous les fichiers du dossier oracle vers oraclebak sauf "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
Le chemin d'exclusion est le chemin relatif du fichier sous « SRC », par ex. nous voulons exclure "oracle/oradata/rmanbackup", et le répertoire parent est oracle, donc le chemin d'exclusion est "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
Vous pouvez également utiliser l'option "–exclude-from=FILE ” si vous avez plus de fichiers/répertoires à exclure. Dans ce cas, il vous suffit de lister les fichiers/répertoires à exclure dans un fichier et de fournir le chemin du fichier à l'option "–exclude-from="
# man rsync --exclude-from=FILE read exclude patterns from FILE
Par exemple :
# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak
Ici,
/tmp/exclude_list contient une liste de fichiers/répertoires à exclure lors de la copie des autres.