Bash 是否可以在ftp脚本中插入for循环?

Bash 是否可以在ftp脚本中插入for循环?,bash,ftp,Bash,Ftp,我想在ftp脚本中加入for循环。我的代码如下 ftp -n ftp.server.com <<EOF user name passwd bin prompt for DATA in d f g l m n o p q; do mkdir /directory/$DATA cd /directory/$DATA mput *.$DATA done hash bye EOF 当然,

我想在ftp脚本中加入for循环。我的代码如下

ftp -n ftp.server.com <<EOF
    user name passwd
    bin
    prompt
    for DATA in d f g l m n o p q; do
        mkdir /directory/$DATA
        cd /directory/$DATA
        mput *.$DATA
    done
    hash
    bye
EOF

当然,我可以将这个ftp脚本放入for循环,反之亦然。有什么好的建议吗?

您不能在
ftp
提示符中使用
bash
循环。但是您可以通过bash循环为
ftp
生成
stdin

{ 
    echo username passwd
    echo bin
    echo prompt
    for DATA in d f g l m n o p q; do
        echo mkdir /directory/$DATA
        echo cd /directory/$DATA
        echo mput *.$DATA
    done
    echo hash
    echo bye
} | ftp -n ftp.server.com

我的解决方案是将今天创建/修改的所有文件上载到远程服务器

#!/bin/bash

HOST='hostname'
USER='username'
PASSWD='password'

# Local directory where the files are stored.
cd "/local/directory/from where to upload files/"

# To get all the files added today only.
TODAYSFILES=`find -maxdepth 1 -type f -mtime -1`


# remote server directory to upload backup
REMOTEDIR="/directory on remote ftp computer/"

for FILENAME in ${TODAYSFILES[@]}; do
  ftp -n -v $HOST << EOT
  ascii
  user $USER $PASSWD
  prompt
  cd $REMOTEDIR
  put $FILENAME
  bye
  EOT
done
#/bin/bash
主机名
USER='username'
PASSWD='password'
#存储文件的本地目录。
cd“/本地/目录/从何处上载文件/”
#仅获取今天添加的所有文件。
TODAYSFILES=`find-maxdepth 1-type f-mtime-1`
#要上载备份的远程服务器目录
REMOTEDIR=“/远程ftp计算机上的目录/”
用于${TODAYSFILES[@]}中的文件名;做

ftp-n-v$HOST您是尝试在一个会话中上载/下载多个文件,从而实现循环,还是尝试通过脚本将其自动化?是的,我想分别将文件上载到一些目录中。您可以尝试使用此选项(ftp-n-v)吗查看它是否在日志中省略了更多内容,并在提示off时进行检查。如果不能在
ftp
中放入循环,则它没有任何类似的脚本命令。您可以编写一个使用
curl
wget
的循环,也可以这样编写:
{echo user name passwd;echo bin;echo prompt;for…do…done;echo hash;echo bye;}ftp-n ftp.server.com
#!/bin/bash

HOST='hostname'
USER='username'
PASSWD='password'

# Local directory where the files are stored.
cd "/local/directory/from where to upload files/"

# To get all the files added today only.
TODAYSFILES=`find -maxdepth 1 -type f -mtime -1`


# remote server directory to upload backup
REMOTEDIR="/directory on remote ftp computer/"

for FILENAME in ${TODAYSFILES[@]}; do
  ftp -n -v $HOST << EOT
  ascii
  user $USER $PASSWD
  prompt
  cd $REMOTEDIR
  put $FILENAME
  bye
  EOT
done