在本地机器上完成脚本编写后,我需要将它们复制到集群中以执行代码。例如,我想将我当前目录中的所有 matlab 文件复制到服务器 id@server 的目录中。
任何人都可以帮助编写一个非常基本的 Makefile 来实现这个目的吗?
非常感谢!
约翰
这是 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)
用make
or运行它make push
。关键是变量$?
,它填充了比目标更新的所有先决条件的列表 - 在本例中,.m
是比上次推送更新的文件列表。
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
.