Shell-Script

rsync - 僅當某個文件不存在時才複製目錄的內容

  • July 24, 2017

我們希望將舊伺服器的內容遷移到新伺服器,但我們不想處理所有內容,而是希望排除其中包含*.swf文件的任何目錄。我們知道該標誌,但如果有.swf*文件--exclude,它只會排除文件,而不是父目錄(及其內容)

如果這不能用 rsync 完成,是否有一個 bash 腳本可以在這種情況下用於將文件從一台伺服器複製到另一台伺服器?

您可以生成包含 *.swf 文件的目錄列表,然後將該列表轉換為 rsync 的排除文件。

例如

find /path/to/topdir/ -iname '*.swf' -printf "%h\n" |
   sort -u |
   sed -e 's/^/- /; s:$:/**:' > rsync-exclude.txt

輸出看起來像這樣,可以與 rsync 的--exclude-from=FILE選項一起使用:

- /path/to/topdir/directory1/**
- /path/to/topdir/directory2/**
- /path/to/topdir/directory3/**
- /path/to/topdir/directory5/subdir1/**

請注意,rsync 的包含和排除選項可能很難掌握,它們的工作方式與 glob 或正則表達式不同。你會想先練習--dry-runand ,--verbose直到你得到完全正確的模式。

引用自:https://unix.stackexchange.com/questions/381332