如何排除所有子目录但包含rsync中目录的文件?

我想备份我的Ubuntu系统,我有两个分区需要关注:一个是/ ,另一个是/home

我可能想要备份/ 。 这甚至不是那么大,所以我可以把它放在我的SD卡上,同时响应足以让我想要它的图像(这就是为什么我现在尝试使用rsync)。

关于/home ,它有很多我不关心的子目录,所以我不太可能包含它们,但我想关注那里的文件,比如.bash_history.bashrc.face等等。

所以我想在/home包含文件时排除所有子目录。 我怎样才能做到这一点?

--exclude "*/"无效。 "/*/""/**/" , – 包含--include "*" --exclude */不会显示我想要的内容。 至少它复制了源文件夹,而没有复制其中的任何内容。

试试这个命令:

 rsync -a -f"- */" -f"+ *" /home/user/ destination/ 

man rsync

 -f, --filter=RULE add a file-filtering RULE 

包含所有文件的规则*并排除目录*/

另一种使用常规副本cp

 cp /home/usr/* /destination 

你可以使用重定向摆脱dirs的错误

 cp /home/usr/* /destination 2>/dev/null 

这将只复制您家中没有目录的文件

如果你想用--include--exclude参数解决这个问题,你应该改变它们的顺序:首先排除你想要的东西,然后包括所有东西。 我通常使用此命令执行此操作:

 rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*' 

默认情况下, rsync不复制目录。 也许你正在使用-a标志。 如果是这种情况,请注意根据手册页 , -a相当于-rlptgoD ,所以如果你不想递归,只需使用-lptgoD

试试这个:

 rsync -r --exclude='*/' source/ destination/ 

来源: https : //lists.samba.org/archive/rsync/2008-Stembertember/021746.html