rsync - 排除除子目录之外的所有内容,但排除子子目录
rsync - exclude everything except a subdir, but exclude a sub subdir
我正在尝试将远程目录同步到本地,我想排除除子目录之外的所有内容。但是那个子目录里面有一个我想排除的子目录。我的理解是 rsync 在排除之后应用包含,我试图在这里找出必要的模式。这些是我传递的 include/exclude 标志:
rsync -Pav -e "ssh -i /path/to/key.pem" \
--include="subdir/***" \
--exclude="subdir/subsubdir" \
--exclude="*" \
remote@address.com:/path/to/remote/dir/ \
/path/to/local/dir/
编辑:目前这导致 rsync 抓取子目录内的所有内容,包括我试图排除的子目录。
谢谢!
我关于 rsync 如何应用过滤器的假设被误传了。 @meuh 留下了正确答案的评论:
rsync applies the filters in the order you give them, so try the subsub exclude before the include.
我还必须在我的排除项中添加尾部斜杠。这是正确的 rsync 命令:
rsync -Pav -e "ssh -i /path/to/key.pem" \
--exclude="subdir/subsubdir/" \
--include="subdir/***" \
--exclude="*" \
remote@address.com:/path/to/remote/dir/ \
/path/to/local/dir/
下面是命令 运行 在本地的演示:
rsync -Pav \
--exclude="subdir/subsubdir/"
--include="subdir/***" \
--exclude="*" \
./remote/ \
./local/
之前:
.
├── local
└── remote
├── subdir
│ ├── subsubdir
│ │ └── test.txt
│ └── test.txt
└── test.txt
之后:
.
├── local
│ └── subdir
│ └── test.txt
└── remote
├── subdir
│ ├── subsubdir
│ │ └── test.txt
│ └── test.txt
└── test.txt
我正在尝试将远程目录同步到本地,我想排除除子目录之外的所有内容。但是那个子目录里面有一个我想排除的子目录。我的理解是 rsync 在排除之后应用包含,我试图在这里找出必要的模式。这些是我传递的 include/exclude 标志:
rsync -Pav -e "ssh -i /path/to/key.pem" \
--include="subdir/***" \
--exclude="subdir/subsubdir" \
--exclude="*" \
remote@address.com:/path/to/remote/dir/ \
/path/to/local/dir/
编辑:目前这导致 rsync 抓取子目录内的所有内容,包括我试图排除的子目录。
谢谢!
我关于 rsync 如何应用过滤器的假设被误传了。 @meuh 留下了正确答案的评论:
rsync applies the filters in the order you give them, so try the subsub exclude before the include.
我还必须在我的排除项中添加尾部斜杠。这是正确的 rsync 命令:
rsync -Pav -e "ssh -i /path/to/key.pem" \
--exclude="subdir/subsubdir/" \
--include="subdir/***" \
--exclude="*" \
remote@address.com:/path/to/remote/dir/ \
/path/to/local/dir/
下面是命令 运行 在本地的演示:
rsync -Pav \
--exclude="subdir/subsubdir/"
--include="subdir/***" \
--exclude="*" \
./remote/ \
./local/
之前:
.
├── local
└── remote
├── subdir
│ ├── subsubdir
│ │ └── test.txt
│ └── test.txt
└── test.txt
之后:
.
├── local
│ └── subdir
│ └── test.txt
└── remote
├── subdir
│ ├── subsubdir
│ │ └── test.txt
│ └── test.txt
└── test.txt