如何使用命令覆盖FTP上的文件?

时间:2014-11-27 08:54:08

标签: bash shell ftp ftp-client

我编写了这样一个shell脚本,它通过ftp将文件上传到我的部署服务器。如果你想要一次性完全部署,即整个项目,这个脚本可以很好地工作。但问题是当我在本地机器上更改特定文件时,现在我希望它使用ftp覆盖服务器上的现有相同文件,而不是覆盖。

MKDIR=`for directory in $FOLDERS; do echo "mkd \"${directory}\""; done`
DELETE=`for file in $DFILES; do echo "delete \"${file}\""; done`
ATTACH=`for file in $FILES; do echo "put \"${file}\""; done`


IFS=$ORIGIFS
# Send updates to server
    ftp -nv <<EOF
    open $FTPHOST
    user $FTPUSER $FTPPASS
    binary
    cd $FTPDIR
    $MKDIR
    $ATTACH
    quit
 EOF

其中:FOLDERS:包含要创建的目录,DELETE是已删除文件列表的字符串,ATTACH包含已修改且需要在服务器上覆盖的文件列表。

之后我在现有文件中修改后第二次运行它:

       local: ./testproject/trunk/test.php ./svnupdate.txt remote: ./testproject/trunk/test.php ./svnupdate.txt
       local: ./testproject/trunk/test.php ./svnupdate.txt: No such file or directory

1 个答案:

答案 0 :(得分:0)

我找到了答案。

我的脚本中的问题陈述:

ATTACH=`for file in $FILES; do echo "put \"${file}\""; done`

我在哪里创建要上传的文件列表。但是这段代码将@Jdamian告诉每个文件名连接起来。 @Jdamian感谢你指出我的错误。

解决方案:

ATTACH=`for file in $FILES
do
    echo "put $file"
done`