You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合find命令实现目录多文件远程FTP传输(含定时任务需求)

结合find命令与FTP脚本实现定时备份文件传输

嘿,我来帮你把find命令和现有的FTP脚本整合起来,精准传输符合条件的备份文件,还能设置定时自动执行~

修改后的完整FTP传输脚本

首先,我们需要调整原脚本,让它能精准处理find命令筛选出的文件,避免传输整个目录的冗余文件。下面是修改后的脚本:

#!/bin/sh
# 配置FTP服务器信息
USERNAME="your_ftp_username"
PASSWORD="your_ftp_password"
SERVER="your_ftp_server_ip"

# 本地备份目录路径
LOCAL_BACKUP_DIR="/home/backup"

# 生成远程备份目录的时间戳
DATE=$(date +%Y-%m-%d-%H.%M.%S)
REMOTE_BACKUPDIR="/backup/${DATE}/"

# 切换到本地备份目录,避免处理绝对路径的麻烦
cd "$LOCAL_BACKUP_DIR" || { echo "无法访问本地备份目录 $LOCAL_BACKUP_DIR,脚本退出"; exit 1; }

# 创建临时文件存储符合条件的文件列表
TMP_FILE=$(mktemp)

# 用find命令筛选出近1天且超过59分钟的.tar.gz文件,存入临时文件
find . -mtime -1 -mmin +59 -type f -name "*.tar.gz*" > "$TMP_FILE"

# 检查是否找到有效文件,避免空连接FTP服务器
if [ ! -s "$TMP_FILE" ]; then
    echo "未找到符合条件的.tar.gz备份文件,无需执行传输"
    rm "$TMP_FILE"
    exit 0
fi

# 启动FTP传输流程
ftp -inv "$SERVER" <<EOF
user $USERNAME $PASSWORD
mkdir $REMOTE_BACKUPDIR
cd $REMOTE_BACKUPDIR
# 遍历临时文件中的列表,逐个传输文件
$(while read -r file; do echo "put \"$file\""; done < "$TMP_FILE")
quit
EOF

# 清理临时文件,避免残留
rm "$TMP_FILE"

脚本关键说明

  • 切换本地目录:先进入/home/backup,让find输出相对路径,避免FTP处理绝对路径时出现问题
  • 临时文件存储列表:用mktemp创建安全的临时文件,存储筛选后的文件路径,能兼容带空格或特殊字符的文件名
  • 空文件检查:如果没有符合条件的文件,直接退出,避免无效的FTP连接
  • 逐个传输文件:通过while循环生成put命令,比mput更可靠,尤其是处理特殊文件名时

设置Cron定时任务

接下来我们把这个脚本设置成定时自动执行,比如每天凌晨2点运行:

  1. 先给脚本添加执行权限:
chmod +x /path/to/ftp_backup.sh

(把/path/to/替换成你实际保存脚本的路径)

  1. 编辑crontab配置:
crontab -e
  1. 在文件末尾添加一行定时规则:
0 2 * * * /path/to/ftp_backup.sh >> /var/log/ftp_backup.log 2>&1
  • 这条规则表示每天凌晨2点执行脚本
  • 后面的>> /var/log/ftp_backup.log 2>&1会把脚本的输出和错误信息写入日志文件,方便后续排查问题

注意事项

  • 替换脚本中的USERNAME、PASSWORD、SERVER为你的实际FTP服务器信息
  • 确保系统中安装了ftp客户端(Debian/Ubuntu可执行apt install ftp,CentOS/RHEL可执行yum install ftp)
  • 手动执行一次脚本测试:/path/to/ftp_backup.sh,确认能正常传输文件

内容的提问来源于stack exchange,提问作者Catbear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:35:49