Bash 是否可以在ftp脚本中插入for循环?
我想在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 -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