我正在尝试将目录/文件结构从一个目录递归复制到另一个目录,仅保留 html 文件。这应该是包含/排除的简单情况,不是吗?
我只想先把文件打印出来。等我打印好之后,我再复印。
rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html'
把所有文件都给我。
rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*'
和
rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*'
rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=*
不要给我任何文件。
rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'
看起来它给了我整个目录结构和仅 html 文件。但我不想要空目录。
帮助!
在 Mac OS 10.6 上
答案1
您是否考虑过使用 find 来完成您的艰苦工作?
类似于
find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \;
将重新创建 ./ 目录树,在其中找到 html 文件,并在 /target/base/directory 下构建相同的文件
答案2
Rsync 可能会对此类选择性复制造成混淆。我使用以下命令执行您要求的任务:
rsync -avP \
--filter='+ */' \
--filter='+ **/*.html' \
--filter='- *' \
--prune-empty-dirs \
--delete \
/source/ \
/dest/
基本上,您需要在搜索中包含所有目录,然后将所有*.html
文件添加到列表中,排除所有其他文件。
该--prune-empty-dirs
选项使用起来很方便,因为它可以排除任何没有文件的目录*.html
。
答案3
我不能 100% 肯定这是最好的[0]方法,但你可以在上次尝试的基础上稍作调整,让它发挥作用。只需添加修剪目录选项 (--prune or -m
)。
rsync -am --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'
[0] 我说的“最佳”是指最简洁、最高效的方式。似乎应该有一种更优雅的方式来表达这一点,但我不知道那是什么。