如何上传在bash脚本(FTP)的文件服务器?如何上传在bash脚本(FTP)的文件服务器?(How

2019-05-13 02:13发布

我想写将文件上载到服务器的bash脚本。 我怎样才能做到这一点? 是一个bash脚本用于此正确的事情?

Answer 1:

下面是两个答案。 首先是使用诸如SSH / SCP / SFTP更安全/灵活的解决方案的建议。 二是如何在批处理模式FTP运行的解释。

一个安全的解决方案:

你真的应该使用SSH / SCP / SFTP此,而不是FTP。 SSH / SCP有更加安全和工作与公钥/私钥这使得它无需用户名或密码运行的好处。

您可以发送一个文件:

scp <file to upload> <username>@<hostname>:<destination path>

或者整个目录:

scp -r <directory to upload> <username>@<hostname>:<destination path>

有关设置键和移动文件到rsync的,如果你有很多文件的移动,或者是有用的服务器的详细信息,如果你有时会得到一组随机文件中只是一个新的文件,看看:

http://troy.jdmz.net/rsync/index.html

您也可以ssh方式连接到服务器后执行一个命令:

man ssh

SSH [...剪断...]主机名[命令]如果指定命令,则远程主机,而不是登录壳上执行。

所以,示例性的命令是:

ssh username@hostname.example bunzip file_just_sent.bz2

如果您可以使用SFTP的钥匙,以获得安全连接的好处,也有我用来执行命令两个技巧。

首先,你可以通过使用echo和管道命令

echo "put files*.xml" | sftp -p -i ~/.ssh/key_name username@hostname.example

您还可以使用与一个批处理文件-b参数:

sftp -b batchfile.txt ~/.ssh/key_name username@hostname.example

一个FTP的解决方案,如果你真的需要它:

如果你明白,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

该“-n”到FTP确保命令不会尝试从当前终端获取密码。 其他花哨的部分是使用定界符的:在<<END_SCRIPT开始定界符,然后把相同的END_SCRIPT对自身行的开始结束定界符。 该binary命令将其设置为二进制模式,帮助,如果你正在转移除文本文件以外的东西。



Answer 2:

您可以使用定界符来做到这一点如

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

所以FTP进程被馈送一切达标准输入End-Of-Session 。 产卵的过程中任何一个有用的技巧,不局限于FTP! 请注意,这节省了产卵一个单独的进程(回声,猫等)。 不是主要的资源节约型,但值得铭记。



Answer 3:

安装ncftpput和ncftpget。 他们通常是同一个包的一部分。



Answer 4:

在一个行命令:

ftp -in -u ftp://username:password@servername/path/to/ localfile


Answer 5:

用它来上传文件到远程位置

#!/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


Answer 6:

#/bin/bash
# $1 is the file name
# usage: this_script  <filename>
IP_address="xx.xxx.xx.xx"
username="username"
domain=my.ftp.domain
password=password

echo "
 verbose
 open $IP_address
 USER $username $password
 put $1
 bye
" | ftp -n > ftp_$$.log


Answer 7:

无需复杂的东西 - 这应该工作:

#/bin/bash
echo "
 verbose
 open ftp.mydomain.net
 user myusername mypassword
 ascii
 put textfile1
 put textfile2
 bin
 put binaryfile1
 put binaryfile2
 bye
" | ftp -n > ftp_$$.log

或者你可以使用mput的,如果你有很多文件...



Answer 8:

工作示例把你的文件上根...........看到它很简单

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0


Answer 9:

CD C:\ Program Files文件(x86)的\的WinSCP

winscp.exe /控制台/命令“开放用户名:* * @server”“把文件路径”



Answer 10:

如果你想用它内部有一个“为”到最后生成的文件复制的每一天bacakup ...

j=0  
var="`find /backup/path/ -name 'something*' -type f -mtime -1`"  
#we have in $var some files with last day change date

for i in $var  
  do  
  j=$(( $j + 1 ))  
  dirname="`dirname $i`"  
  filename="`basename $i`"  
  /usr/bin/ftp -in >> /tmp/ftp.good 2>> /tmp/ftp.bad << EOF  
    open 123.456.789.012  
    user user_name passwd  
    bin  
    lcd $dirname  
    put $filename  
    quit  
  EOF      #end of ftp  
done       #end of for iteration


Answer 11:

ftp命令不适用于脚本,因此控制很尴尬,并得到它的退出状态更是尴尬。

卷曲被制成编写脚本,并且还具有可以很容易地通过只是修改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/

如果你一定要,你可以使用命令行上直接指定用户名和密码--user username:password代替--netrc



Answer 12:

echo -e "open <ftp.hostname>\nuser <username> <password>\nbinary\nmkdir New_Folder\nquit"|ftp -nv


文章来源: How to upload (FTP) files to server in a bash script?
标签: bash ftp