Frage :Wie kopiert man Ordner rekursiv und schließt bestimmte Ordner/Dateien aus, wenn man rsync verwendet?
Im Allgemeinen verwenden wir den Befehl „cp“, um Dateien zu kopieren, aber leider verfügt der Befehl „cp“ nicht über die Funktion „Ausschließen“, daher müssen wir einige Skripte schreiben, um die unerwünschten Dateien auszuschließen, oder wir können ein anderes Tool verwenden. rsync'.
Aus der Manpage des rsync-Befehls:
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
Die Syntax des rsync-Befehls zum Kopieren von Verzeichnissen unter Ausschluss bestimmter Dateien/Verzeichnisse lautet wie folgt:
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
Wenn wir beispielsweise nicht alle Dateien des Oracle-Ordners nach Oraclebak kopieren möchten, außer „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
Der Ausschlusspfad ist der relative Pfad der Datei unter „SRC“, z. wir möchten „oracle/oradata/rmanbackup“ ausschließen, und das übergeordnete Verzeichnis ist oracle, also lautet der Ausschlusspfad „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
Sie können auch die Option „–exclude-from=FILE verwenden ” wenn Sie mehr Dateien/Verzeichnisse ausschließen möchten. In diesem Fall müssen Sie nur die auszuschließenden Dateien/Verzeichnisse in einer Datei auflisten und den Dateipfad für die Option „–exclude-from=“
angeben# man rsync --exclude-from=FILE read exclude patterns from FILE
Zum Beispiel:
# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak
Hier enthält
/tmp/exclude_list eine Liste von Dateien/Verzeichnissen, die ausgeschlossen werden sollen, während die anderen kopiert werden.