我需要一些帮助,将以下代码从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并且它可以工作。
感谢任何帮助,谢谢。
答案 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