Domanda :Come copiare le cartelle in modo ricorsivo escludendo cartelle/file specifici quando si utilizza rsync?
In generale, utilizziamo il comando 'cp' per copiare i file, ma sfortunatamente il comando 'cp' non ha la funzione "escludi", quindi dobbiamo scrivere degli script per escludere i file indesiderati, oppure possiamo usare un altro strumento ' rsync'.
Dalla pagina man del comando rsync:
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
La sintassi del comando rsync per copiare le directory escludendo file/directory specifici è la seguente:
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
Ad esempio, se non vogliamo copiare tutti i file della cartella Oracle in Oraclebak eccetto '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
Il percorso di esclusione è il percorso relativo del file in "SRC", ad es. vogliamo escludere "oracle/oradata/rmanbackup" e la directory padre è oracle, quindi il percorso di esclusione è "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
Puoi anche utilizzare l'opzione “–exclude-from=FILE ” se hai più file/directory da escludere. In tal caso, devi solo elencare i file/directory da escludere in un file e fornire il percorso del file all'opzione “–exclude-from=”
# man rsync --exclude-from=FILE read exclude patterns from FILE
Ad esempio:
# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak
Qui,
/tmp/exclude_list contiene un elenco di file/directory da escludere durante la copia degli altri.