如何使用查找命令输出在目录中(远程)中多个文件进行FTP传输



我必须做一个CRON的工作,以将100多个备份 .tar.gz 文件传输到FTP备份服务器。粘在结合查找命令

 find /home/backup -mtime -1 -mmin +59 -type f -name "*.tar.gz*"

此部分正常工作,脚本部分:

#!/bin/sh
USERNAME="user"
PASSWORD="password"
SERVER="someip"
FILE="/home/backup"
DATE="`date +%Y-%m-%d-%H.%M.%S `"
BACKUPDIR="/backup/${DATE}/"
ftp -inv $SERVER <<EOF
user $USERNAME $PASSWORD
mkdir $BACKUPDIR
cd $BACKUPDIR
mput $FILE/*.tar.gz*
quit
EOF

为此

00 12 * * * find /home/backup -mtime -1 -mmin +59 -type f -name "*.tar.gz*" -exec /root/ftp.sh {} ;

不起作用。请不要使用SCP/SSH建议(必须使用FTP进行。

我建议您使crontab命令较小。并不是说它不应该以您的方式工作,但是更容易理解正在发生的事情。

00 12 * * * sh /root/ftpjob.sh

#!/bin/sh
username="user"
password="password"
server="someip"
sourcedir="/home/backup"
date="`date +%Y-%m-%d-%H.%M.%S `"
remotedir="/backup/${DATE}/"
find /home/backup -mtime -1 -mmin +59 -type f -name "*.tar.gz*" |
 while read filename ; do
    /bin/ftp -inv $server >> /tmp/ftpjob.log <<EOF
user $username $password
mkdir $remotedir
cd $remotedir
put $sourcedir/$filename
EOF
    echo "$date copied $filename" >> /tmp/ftpjob.log
done

只要您确定您的tar.gz文件名没有空间。

另一方面,如果您能够用mput进行FTP,则没有理由完全进行查找:

#!/bin/sh
username="user"
password="password"
server="someip"
sourcedir="/home/backup"
date="`date +%Y-%m-%d-%H.%M.%S `"
remotedir="/backup/${DATE}/"
/bin/ftp -inv $server >> /tmp/ftpjob.log <<EOF
user $username $password
mkdir $remotedir
cd $remotedir
mput $sourcedir/*.tar.gz.*
EOF

因此,您要么使用find在文件上循环循环,如果有多个级别的目录,则tar.gz文件的位置是一个好主意,或者如果所有档案都始终在ftp中,则使用mput相同的目录。

基于ljm dullaart答案工作脚本看起来像:

#!/bin/sh
USERNAME="user"
PASSWORD="password"
SERVER="someip"
DATE="`date +%Y-%m-%d `"
BACKUPDIR="/${DATE}/"
find . -mtime -1 -mmin +59 -type f -name "*.tar.gz*" -exec basename {} .tar.gz* ; |
  while read filename ; do
    /bin/ftp -inv $SERVER >> /tmp/ftp.log <<EOF
user $USERNAME $PASSWORD
mkdir $BACKUPDIR
cd $BACKUPDIR
put $filename
EOF
    echo "$date copied $filename" >> /tmp/ftp.log
done

可以使用其他循环完成:

#!/bin/sh
USERNAME="user"
PASSWORD="password"
SERVER="someip"
SOURCEDIR="/home/backup"
DATE="`date +%Y-%m-%d `"
BACKUPDIR="/${DATE}/"
cd /home/backup
for i in $(find /home/backup -mtime -1 -mmin +59 -type f -name "*.tar.gz*" -exec basename {} . ;)
do
/bin/ftp -inv $SERVER >> /tmp/ftp.log <<EOF
user $USERNAME $PASSWORD
mkdir $BACKUPDIR
cd $BACKUPDIR
put $i
EOF
done

两者都将用于上传通过FTP分类的备份文件。

最新更新