Rsync

如何使用 rsync 排除數字目錄?

  • May 16, 2019

我知道 rsync 有一個--exclude我經常使用的選項。但是我如何指定它應該排除所有“數字”目錄?

在下面的目錄列表中,我只想複製它csshtmlinclude

.
..
123414
42344523
345343
2323
css
html
include

通常我的語法是這樣的

rsync -avz /local/path/ user@server:/remote/path/ --exclude="cache"

我認為它應該看起來像 --exclude="[0-9]*",但我認為這行不通。

rsync 的 exclude 選項並不真正支持正則表達式,它更像是一個 shell globbing 模式匹配。

如果這些目錄是相當靜態的,您應該將它們列在一個文件中並使用--exclude-from=/full/path/to/file/exclude_directories.txt.

更新以提供範例

首先,您只需將目錄放入文件中:

find . -type d -regex '.*/[0-9]*$' -print > /tmp/rsync-dir-exlcusions.txt

要麼

( cat <<EOT
123414
42344523
345343
2323
EOT ) > /tmp/rsync-directory-exclusions.txt

然後你可以做你的 rsync 工作:

rsync -avHp --exclude-from=/tmp/rsync-directory-exclusions.txt /path/to/source/ /path/to/dest/

您只需要一個額外的步驟來設置包含要排除的目錄的文本文件,每行 1 個。

請記住,作業中目錄的路徑是它們與 rsync 如何查看目錄的相對路徑。

您不能在 rsync 的模式語法中說“僅包含數字的名稱”。因此,包括所有包含非數字的名稱並排除其餘名稱。

rsync --include='*[!0-9]*' --exclude='*/' …

另請參閱我的rsync 模式指南

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