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


13

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

我可能要备份/。它的大小还不算大,所以我可以将其放在SD卡上,同时又足够灵敏,让我想拥有它的图像(这就是为什么我现在尝试使用rsync的原因)。

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

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

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

Answers:


17

试试这个命令:

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

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


/ proc有一个虚拟的虚幻文件系统,应将其从备份中排除,还应将/ tmp和/ run排除在外
Maythux 2015年

我最初用于备份内容的命令是这样的:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir

/ proc,/ tmp和/ run,请检查!无论如何,正如您在我的评论中看到的那样,我几乎要备份整个根文件系统(主目录除外),几乎没有例外。将放入-f" */" -f"+ *"我的代码中是否安全?也许会是什么样-f"- home/dinir/*/" -f"+ home/dinir/*"
迪尼尔2015年

您应该像这样使用它-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux 2015年

但我建议您使用cp在家中,这要容易得多
Maythux

3

如果要使用--include--exclude参数解决此问题,则应更改它们的顺序:首先排除所需内容,然后包括所有内容。我通常使用以下命令执行此操作:

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.