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