linux - 如何同步目标文件夹中存在的所有文件夹
问题描述
我有两个文件夹FolderA
,FolderB
如下所示。我想要rsync
公共子文件夹。例如,我可以做rsync -avzP /path/to/FolderB/* /path/to/FolderA/
,这将保持SubFolder1
和SubFolder3
镜像。FolderB
我的问题是,如果目的地没有明确--include
或--exclude
单独的子文件夹(例如,如果它们太多),我如何能实现相同的目标。
FolderA
|--SubFolder1
|--SubFolder2
|--SubFolder3
|--SubFolder4
FolderB
|--SubFolder1
|--SubFolder3
解决方案
FolderA
您可以使用正常的内容 FolderB
作为源来更新所有文件:
rsync -uav /path/to/FolderB/ /path/to/FolderA
(注意:后面'/'
是FolderB/
强制复制的内容而FolderB
不是FolderB
自身)
反向执行它并FolderB
从更新FolderA
而不是复制SubFolder2
和SubFolder4
使用--existing
选项 which will 进行操作"skip creating new files on receiver"
,但这也将阻止新文件和目录在其中创建SubFolder1
和SubFolder3
创建。
您最好的选择是不复制SubFolder2
,同时允许在其中创建SubFolder4
新文件和目录是使用该选项。请参阅rsync(1) - Linux 手册页。SubFolder1
SubFolder3
--filter
--filter
用于排除SubFolder2
和SubFolder4
复制 from FolderA
to的典型方法FolderB
是:
rsync -uav --filter -_SubFolder2/ --filter -_SubFolder4/ /path/to/FolderA/ /path/to/FolderB
这将允许您复制 to 的完整内容/path/to/FolderA/
而不/path/to/FolderB/
包括SubFolder2
and SubFolder4
。
编辑大量子文件夹的每条评论
FolderA
如果您不想在其下同步大量文件夹FolderB
,那么您的另一个选择是创建一个文本文件,其中仅包含您想要同步的文件夹的绝对路径,然后仅使用和选项子文件夹。这将消除在命令行上指定大量选项的麻烦。SubFolderX
FolderA
rsync
FolderB
--no-R
--files-from=folderlist
rsync
--filter
例如,您可以使用以下命令创建文件夹列表:
find /path/to/FolderA -maxdepth 1 -type d > folderlist
(注意:上面指定绝对路径,find
会生成folderlist
包含绝对路径的文件)
现在编辑您的folderlist
文件并删除父目录(例如/path/to/FolderA
)和您不想在FolderB
. 您现在可以使用该folderlist
文件来控制同步到哪些子文件夹下FolderA
,FolderB
而不必在命令行中包含一长串过滤器。你的命令行然后变成
rsync -uai -r --no-R --files-from=folderlist / /path/to/FolderB
(注意:'/'
as源用作 中包含的路径的基础。folderlist
您可以更改-i
选项以控制转储到屏幕的信息级别,例如-v
,等等...或完全删除它以抑制除错误以外的任何报告)
(另请注意:使用时--files-from
,-a
并不意味着-r
(递归),因此-r
如果需要递归传输,则需要显式添加)
推荐阅读
- javascript - 拖动滚动,长按移动 div,短按显示 div
- python - osmnx 如何知道在最短路径中绘制哪些边
- python - 为什么 Django request.user.is_authenticated 需要 8 秒才能执行?
- python-3.x - 使用 YOLOV4-Pytorch 制作 API 时出现运行时错误
- java - 使用 Stream 将字符串中的字母映射到出现次数
- reactjs - 为什么每次我重新加载页面时我的 localStorage 都会变空?
- django - Crispy Forms InlineRadios 拒绝正确显示
- r - 根据文件名将文件移动到R中的子目录
- java - 在这种情况下,函数式操作的优势是什么?
- python - 斐波那契备忘录,不将备忘录传递给子调用与将备忘录传递给子调用的运行方式相同?