在 vagrant 中共享单个文件
Share a single file in vagrant
如何共享单个文件,而不是像
那样共享整个文件夹
config.vm.synced_folder "host/folder", "box/folder"
?
换句话说,有没有办法得到类似的东西:
config.vm.synced_folder "host/folder/file.conf", "box/folder/file.conf"
您无法同步单个文件。但也许您可以通过使用 RSync 和 rsync__exclude
选项同步文件夹来达到相同的效果:
rsync__exclude
(string or array of strings) - A list of files or directories to exclude from the sync. The values can be any acceptable rsync exclude pattern.
Vagrant 默认使用供应商技术(例如 VirtualBox、VMWare 等)提供的 file/folder 同步机制。如果提供商不能在每个文件的基础上进行同步,那么 Vagrant 也不能。 Vagrant 还可以使用 NFS、RSync 或 SMB 进行文件同步。但是,查看代码,似乎每个人都期望每个文件夹的范例。
另一种可能性是使用 provisioning options to selectively synchronize the appropriate file(s). If you want to take the easy way out you could use the shell provisioner to just copy the file you need. For something more interesting, this is a reasonable guide to getting started with Puppet in Vagrant, and you might be interested in the puppet file
Type.
之一
作为,您只能同步整个文件夹。
作为一种解决方法,我最终将整个文件夹同步到一个临时文件夹,并在稍后的步骤中创建了一个符号链接,我需要它到这个临时文件夹中的单个文件。
在您的 rsync args 数组中使用 include
标志:
config.vm.synced_folder "host/folder/", "box/folder/", type: "rsync",
rsync__args: ["--include=file.conf"]
您可以使用 file 配置器来执行此操作:
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
接受的答案(由 cdmo 提供)对我不起作用,但很接近并引导我找到正确的解决方案,干杯。要只复制一个文件,我需要将其更改为:
config.vm.synced_folder "c:/hostpath/", "/guestpath/", type: "rsync",
rsync__args: ["-r", "--include=file.text", "--exclude=*"]
注意参数及其顺序,-r 必须存在并且 --include 必须在 -- 之前排除.
如果需要,您可以使用 -a 选项代替 -r 选项,它结合了 -r 以及其他几个用于保留权限、所有权等的选项(请参阅 rsync 帮助)。
我的测试配置:Vagrant 2.0.2/Win10/VirtualBox 5.2.6
如何共享单个文件,而不是像
那样共享整个文件夹config.vm.synced_folder "host/folder", "box/folder"
?
换句话说,有没有办法得到类似的东西:
config.vm.synced_folder "host/folder/file.conf", "box/folder/file.conf"
您无法同步单个文件。但也许您可以通过使用 RSync 和 rsync__exclude
选项同步文件夹来达到相同的效果:
rsync__exclude
(string or array of strings) - A list of files or directories to exclude from the sync. The values can be any acceptable rsync exclude pattern.
Vagrant 默认使用供应商技术(例如 VirtualBox、VMWare 等)提供的 file/folder 同步机制。如果提供商不能在每个文件的基础上进行同步,那么 Vagrant 也不能。 Vagrant 还可以使用 NFS、RSync 或 SMB 进行文件同步。但是,查看代码,似乎每个人都期望每个文件夹的范例。
另一种可能性是使用 provisioning options to selectively synchronize the appropriate file(s). If you want to take the easy way out you could use the shell provisioner to just copy the file you need. For something more interesting, this is a reasonable guide to getting started with Puppet in Vagrant, and you might be interested in the puppet file
Type.
作为
作为一种解决方法,我最终将整个文件夹同步到一个临时文件夹,并在稍后的步骤中创建了一个符号链接,我需要它到这个临时文件夹中的单个文件。
在您的 rsync args 数组中使用 include
标志:
config.vm.synced_folder "host/folder/", "box/folder/", type: "rsync",
rsync__args: ["--include=file.conf"]
您可以使用 file 配置器来执行此操作:
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
接受的答案(由 cdmo 提供)对我不起作用,但很接近并引导我找到正确的解决方案,干杯。要只复制一个文件,我需要将其更改为:
config.vm.synced_folder "c:/hostpath/", "/guestpath/", type: "rsync",
rsync__args: ["-r", "--include=file.text", "--exclude=*"]
注意参数及其顺序,-r 必须存在并且 --include 必须在 -- 之前排除.
如果需要,您可以使用 -a 选项代替 -r 选项,它结合了 -r 以及其他几个用于保留权限、所有权等的选项(请参阅 rsync 帮助)。
我的测试配置:Vagrant 2.0.2/Win10/VirtualBox 5.2.6