如何排除所有子目录但包含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