我正在尝试编写一个将文件上传到服务器的bash脚本.我怎样才能做到这一点?bash脚本是否适合用于此目的?
Bri*_*new 78
您可以使用heredoc来执行此操作,例如
ftp -n $Server <<End-Of-Session
# -n option disables auto-logon
user anonymous "$Password"
binary
cd $Directory
put "$Filename.lsm"
put "$Filename.tar.gz"
bye
End-Of-Session
Run Code Online (Sandbox Code Playgroud)
因此ftp进程在stdin上提供所有内容End-Of-Session
.产生任何过程的有用提示,而不仅仅是ftp!请注意,这可以节省产生一个单独的进程(echo,cat等).不是主要的资源节约,但值得铭记.
gre*_*les 64
以下是两个答案.首先是建议使用更安全/灵活的解决方案,如ssh/scp/sftp.其次是如何在批处理模式下运行ftp的说明.
你真的应该使用SSH/SCP/SFTP而不是FTP.SSH/SCP具有更安全和使用公钥/私钥的优点,允许它在没有用户名或密码的情况下运行.
您可以发送单个文件:
scp <file to upload> <username>@<hostname>:<destination path>
Run Code Online (Sandbox Code Playgroud)
或整个目录:
scp -r <directory to upload> <username>@<hostname>:<destination path>
Run Code Online (Sandbox Code Playgroud)
有关使用RSYNC设置密钥和将文件移动到服务器的更多详细信息,如果您要移动大量文件,或者有时在一组随机文件中只获得一个新文件,则非常有用,请查看:
http://troy.jdmz.net/rsync/index.html
您也可以在sshing到服务器后执行单个命令:
从 man ssh
ssh [... snipped ...] hostname [command]如果指定了command,则在远程主机而不是登录shell上执行.
因此,示例命令是:
ssh username@hostname.example bunzip file_just_sent.bz2
Run Code Online (Sandbox Code Playgroud)
如果你可以使用带有密钥的SFTP来获得安全连接的好处,那么我用来执行命令有两个技巧.
首先,您可以使用echo和pipe传递命令
echo "put files*.xml" | sftp -p -i ~/.ssh/key_name username@hostname.example
Run Code Online (Sandbox Code Playgroud)
您还可以使用带有-b
参数的批处理文件:
sftp -b batchfile.txt ~/.ssh/key_name username@hostname.example
Run Code Online (Sandbox Code Playgroud)
如果您了解FTP不安全且更有限,并且您真的想要编写脚本...
http://www.stratigery.com/scripting.ftp.html上有一篇很棒的文章
#!/bin/sh
HOST='ftp.example.com'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
put $FILE
quit
END_SCRIPT
exit 0
Run Code Online (Sandbox Code Playgroud)
ftp的"-n"确保命令不会尝试从当前终端获取密码.另一个奇特的部分是使用heredoc:<<END_SCRIPT
启动heredoc,然后END_SCRIPT
在行的开头就完全相同,结束了heredoc.该binary
命令将其设置为二进制模式,如果您正在传输除文本文件之外的其他内容,这将有所帮助.
Pel*_*son 28
该ftp
命令不是为脚本设计的,因此控制它很笨拙,获得其退出状态更笨拙。
Curl是可编写脚本的,并且还有一个优点,您可以稍后通过修改 URL 轻松切换到其他协议。如果您将 FTP 凭据放在.netrc 中,则只需执行以下操作:
# Download file
curl --netrc --remote-name ftp://ftp.example.com/file.bin
# Upload file
curl --netrc --upload-file file.bin ftp://ftp.example.com/
Run Code Online (Sandbox Code Playgroud)
如果必须,您可以使用--user username:password
代替直接在命令行上指定用户名和密码--netrc
。
Pau*_*lin 18
安装ncftpput和ncftpget.它们通常是同一个包装的一部分.
小智 7
命令在一行:
ftp -in -u ftp://username:password@servername/path/to/ localfile
Run Code Online (Sandbox Code Playgroud)
使用它将文件上传到远程位置
#!/bin/bash
#$1 is the file name
#usage:this_script <filename>
HOST='your host'
USER="your user"
PASSWD="pass"
FILE="abc.php"
REMOTEPATH='/html'
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
put $FILE
quit
END_SCRIPT
exit 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
201282 次 |
最近记录: |