【问题标题】:Batch equivalent for bash with mac terminal带有mac终端的bash的批处理等效项
【发布时间】:2016-11-13 00:46:48
【问题描述】:

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

在批处理文件中:

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 并且它可以工作。

感谢任何帮助,谢谢。

【问题讨论】:

  • 尝试使用$USER变量作为/Users/$USER/Desktop/image.jpg
  • 你这是什么意思?这对我来说没有意义......你能发送一个代码 sn-p 吗?
  • 尝试将FILE定义为FILE='/Users/$USER/Desktop/image.jpg'
  • $USER 是 FTP 服务器的用户名,而不是我的计算机名。我只是删掉了用户名,它真的是 FILE='/Users/Sean/Desktop/image.jpg'

标签: bash macos batch-file ftp


【解决方案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

【讨论】:

  • 嗯,谢谢!现在会试试。但是我上传的文件的“名称”可以与目录中的文件同名吗?编辑:例如put /Users/*username*/Desktop/image.jpg image.jpg
  • 最后一个例子就是这样做的。
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多