我必须做一个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分类的备份文件。