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

时间:2013-10-22 05:34:56

标签: bash makefile

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

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

非常感谢!

约翰

2 个答案:

答案 0 :(得分:1)

如何将文件复制到服务器?假设您有ssh / scp可用:

FILES = file1 file2 *.matlab
copy:
     scp $(FILES) id@server:path/relative/to/your/serverhomedir

使用

运行
$ make copy

作为shell脚本,它看起来像这样:

#!/bin/sh
set -- file1 file2 *.matlab
scp "$@" id@server:path/relative/to/your/serverhomedir

不要忘记chmod u+x yourscript

答案 1 :(得分:0)

以下是Jens的答案以及我的答案here的改编,它利用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)

使用makemake push运行此操作。关键是变量$?,它填充了比目标更新的所有先决条件的列表 - 在这种情况下,是比最后一次推送更新的.m文件列表