【问题标题】:Transfer files from FTP server to local unix server将文件从 FTP 服务器传输到本地 unix 服务器
【发布时间】:2009-08-25 12:19:32
【问题描述】:

我必须将名称包含两个变量 X、Y 并且它们位于 ftp 服务器的目录 ABC 中的文件传输到我的本地 unix 目录 XYZ。传输文件后,我必须转到本地目录路径,我应该解压缩(输入文件是压缩文件)它们。我必须使用用户名和密码才能连接到 FTP。将文件复制到本地服务器时,我还必须使用我的用户名和密码。

这是我目前的尝试。它会起作用吗?我该如何改进它?

ftp -n hostname <<EOF
user username pwd
cd ABC
get ls *X*.tar | ls *Y*.tar username1@pwd1 : XYZ
EOF
bye
for next in `ls *.tar`
do
tar -zvxf $next
done

【问题讨论】:

  • 在 ftp 中不能使用 scp。
  • 在

标签: shell unix ftp


【解决方案1】:

请尝试以下代码。希望对您有所帮助。

#! /bin/bash

cd local_path
USER='username'
PASSWD='password'
file_name='files'

for HOST in ftpserver
do
echo $HOST
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
bin
prompt

cd "remote_path"
lcd "local_path"

mget $file_name.gz*

quit
END_SCRIPT
done

#extract file
mkdir -p ../archive/$DATE
for HOST in ftpserver
do
        gunzip $file_name.gz
done

【讨论】:

  • 但是 1. 我有不同的本地和 ftp 服务器的用户名和密码。 2. 我必须选择名称应包含 X 和 Y 的文件
  • 你应该自己调查一下,如果你有不同的 ftp 和 ssh 用户名,只需为其添加另一个变量。
  • @musicking123: 1) 你说你有 diff 用户并通过本地和 ftp。在我的代码中,您必须输入 ftp 用户并通过,不需要本地用户/通行证。 2) 您可以使用 X.tar 和 Y.tar 而 mget.
  • 只是为了通知 ftp 正在针对 $host 运行,如果您正在为多个主机运行它。如果你不想要,你可以简单地删除/评论这个。
  • 我记得 shell 脚本编写的黄金法则,如果用户没有明确切换,任何脚本都不应在执行时提供输出,例如通过 -v 开关。没有好的风格可以在 unix shell 上提供信息输出。
【解决方案2】:

我建议你看看ftp 命令行 ftp-tool 的手册和脚本。

替代方案:使用wget将ftp文件下载到本地机器,然后scp到目标机器,我想对ssh使用public-key-authentication,scp不需要密码,那么它应该很简单像这样。

wget --ftp-user=$USERNAME --ftp-password=$PASSWORD ftp://$HOSTNAME/ABC/$Y.tar
scp $Y.tar $SCPUSER@$SCPHOST/targetpath/$X.tar

【讨论】:

  • 好吧,我猜不是,您尝试向 ftp 服务器发送您的 scp 命令。
【解决方案3】:

您可以使用wget将文件从FTP服务器下载到unix系统

cd YOUR_DIRECTORY

wget --user=USERNAME --password='PASSWORD' HOST_NAME/REMOTE_PATH/FILE_NAME.EXTENSION

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2014-03-22
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多