我必须完成将100多个备份 .tar.gz 文件传输到ftp备份服务器的cron工作。坚持使用find命令
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做。
答案 0 :(得分:0)
我建议你让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文件有多个级别的目录,或者您将使用mput
,这是一个好主意。 ftp
如果所有档案始终位于同一目录中。
答案 1 :(得分:0)
基于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。