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

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

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

我可能想要备份/。它甚至不是那么大,所以我可以把它放在我的 SD 卡上,同时又足够灵敏,让我想要拥有它的图像(这就是我此刻尝试使用 rsync 的原因)。

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

因此,我想在包含文件的同时排除所有子目录/home。我该如何实现呢?

--exclude "*/"不起作用。"/*/",,"/**/"没有--include "*" --exclude */显示我想要的内容。至少它复制了源文件夹,但没有复制其中的任何内容。

答案1

尝试这个命令:

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

man rsync

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

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

使用常规副本的另一种方法cp

cp /home/usr/* /destination

你可以使用重定向摆脱有关目录的错误

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

这只会复制你家里面的文件,而不会复制目录

答案2

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

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

答案3

尝试这个:

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

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

答案4

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

相关内容