-1

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

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

非常感谢!

约翰

4

2 回答 2

4

这是 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)

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

于 2018-02-15T20:13:47.263 回答
1

How do you copy files to the server? Assuming you have ssh/scp available:

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

Run with

$ make copy

As a shell script, it could look like this:

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

Don't forget to chmod u+x yourscript.

于 2013-10-22T08:22:51.483 回答