使用mac终端进行bash的等效批处理

时间:2016-07-11 06:47:57

标签: bash macos batch-file ftp

我需要一些帮助,将以下代码从Batch转换为Bash for my Mac。它只是一个简单的程序,它从我的计算机中获取文件以放入ftp服务器:

在批处理文件中:

ftp -s:FTP.txt ftp.example.com

在FTP.txt文件中:

*user*
*password*
cd /files/
put "C:\Users\*username*\Pictures\image.jpg"

因此,在几个小时的研究帮助下,我几乎得到了相同的效果,但仍需要一些帮助:

#!/bin/sh
HOST='ftp.example.com'
USER='*user*'
PASS='*password*'
FILE='/Users/*username*/Desktop/image.jpg'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASS
cd /files/
put $FILE
quit
END_SCRIPT

这只是不起作用,它登录,然后更改当前目录,但说:

local: /Users/*username*/Desktop/image.jpg remote: /Users/*username*/Desktop/image.jpg 
Can't open that file: No such file or directory.

然后继续注销。我检查了目录路径,它完全没问题,我甚至可以打开另一个终端并执行cd /Users/username/Desktop/image.jpg并且它可以工作。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

问题是当你这样做时:

put /Users/*username*/Desktop/image.jpg

它正在尝试在您的服务器上创建一个名为

的文件
/Users/*username*/Desktop/image.jpg

但是您的FTP服务器上可能没有名为/Users/.../Desktop的目录将其放入,并且它不会创建路径本身。

您实际需要做的是在服务器上添加要存储上传文件的文件名,如下所示:

put /Users/*username*/Desktop/image.jpg  NEW.jpg

另外,你应该引用变量,所以你需要:

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASS
cd /files/
put "$FILE" NEW.jpg
quit
END_SCRIPT

或者,您可以通过首先在本地更改目录来避免将完整路径传递到FTP服务器,因此您可以这样做:

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASS
cd /files/
lcd "$USER/Desktop"
put image.jpg
quit
END_SCRIPT