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

Din*_*nir 15 rsync

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

我可能想要备份/. 这甚至没有那么大,所以我可以将它放在我的 SD 卡上,同时响应速度足以让我想要拥有它的图像(这就是我此时尝试使用 rsync 的原因)。

而关于/home,它有很多子目录,我不计较太多,所以我就不太可能包括他们,但我想大约需要在那里的文件,例如像护理.bash_history.bashrc.face,等等。

所以我想排除所有子目录,同时包含/home. 我怎样才能做到这一点?

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

May*_*hux 19

试试这个命令:

rsync -a -f"- */" -f"+ *" /home/user/ destination/
Run Code Online (Sandbox Code Playgroud)

man rsync

-f, --filter=RULE           add a file-filtering RULE
Run Code Online (Sandbox Code Playgroud)

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

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

cp /home/usr/* /destination
Run Code Online (Sandbox Code Playgroud)

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

cp /home/usr/* /destination 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

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


小智 5

如果你想用--include--exclude参数来解决这个问题,你应该改变它们的顺序:首先排除你想要的,然后包含所有内容。我通常用这个命令来做到这一点:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Run Code Online (Sandbox Code Playgroud)