如何编写 Makefile 将脚本复制到服务器

jeq*_*ais -1 bash makefile

当我在本地机器上编写完脚本后,我需要将它们复制到集群中来执行代码。例如,我想将当前目录中的所有 matlab 文件复制到服务器 id@server 的目录中。

任何人都可以帮助编写一个非常基本的 Makefile 来实现此目的吗?

多谢!

约翰

Joh*_*ers 6

这是 Jens 答案的改编版,以及我在这里的答案,它利用 Make 的功能仅复制自上次将文件复制到服务器以来已修改的文件。这样,如果您有数百个.m文件并且修改了其中一个文件,则不会将所有文件复制到服务器。

它使用一个空的隐藏文件 ,.last_push该文件仅用于记录(通过其自己的时间戳)我们上次将文件复制到服务器的时间。

FILES = $(shell find . -name *.m)
SCP = scp id@server:path/relative/to/your/serverhomedir
LAST_PUSH = .last_push

.PHONY : push
push : $(LAST_PUSH)

$(LAST_PUSH) : $(FILES)
    $(SCP) $?
    touch $(LAST_PUSH)
Run Code Online (Sandbox Code Playgroud)

make使用或运行此命令make push。关键是变量,它填充了比目标更新的所有先决条件的列表 - 在本例中,是比上次推送更新的文件$?列表。.m

  • 这里的“$(SCP) $?”不是扩展为“scp $external_url_with_path $modified_file1 $modified_file2”等等吗?因为如果是这样的话,它就不是推——而是拉。或者我错过了什么。 (2认同)