如何使用find命令输出在目录(到远程)中进行ftp传输多个文件

时间:2018-04-02 11:34:39

标签: bash ftp

我必须完成将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做。

2 个答案:

答案 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。