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

FTP发送文件日志被覆盖问题求助:现有解决方案无效

解决FTP日志覆盖及按文件生成日志的问题

看起来你现在的核心痛点是:已经实现了FTP文件发送,但要么日志每次被覆盖,要么没法给每个发送的文件单独生成对应日志。我先帮你分析下现有脚本的问题,再给出针对性的修复方案:

先明确你的需求方向

首先得确认你想要的是哪种日志模式:

  • 模式1:每个发送的文件对应独立的FTP日志文件(比如每个CSV文件都有自己的日志)
  • 模式2:所有发送文件的日志追加到同一个日期命名的日志文件(不被覆盖,一天一个日志)

下面分别给出两种模式的修复方案:


模式1:为每个文件生成独立FTP日志

这种模式下,我们需要把日志文件名和当前处理的CSV文件关联起来,避免共用同一个日志导致覆盖。修改后的脚本如下:

# 先生成精确的日期戳(可选,也可以用时分秒避免同秒内的文件冲突)
datestamp=$(date +%Y%m%d_%H%M%S)

# 切换到目标文件目录,失败则直接退出(避免后续操作在错误目录执行)
cd "$files" || { echo "Failed to enter directory $files"; exit 1; }

# 遍历所有CSV文件(避免用ls,直接通配符更安全)
for i in *.csv; do
    # 如果没有匹配到CSV文件,跳过循环
    [ -f "$i" ] || continue

    # 为当前文件生成专属日志名,比如:ESS09651.订单文件_20240520_143022.ftplog
    ftplog="ESS09651.${i%.csv}_${datestamp}.ftplog"
    
    # 移动文件到归档目录(变量加双引号,避免文件名带空格出错)
    mv -f "$i" "$archive/ESS09651.$i"
    
    # 执行FTP操作,日志写入专属文件(用>覆盖单个文件的日志,确保每个文件日志独立)
    ftp -vn "$ftphostname" > "$ftp/$ftplog" 2>&1 << EOF
quote USER $username
quote PASS $password
put $archive/ESS09651.$i ESS09651.$i
bye
EOF
done

模式2:所有日志追加到同一日期文件(不覆盖)

如果你的需求是把一天内所有FTP操作日志都存在同一个文件里,不会被覆盖,那重点是确保用>>追加日志,同时正确生成日期戳:

# 生成当天的日期戳(比如20240520)
datestamp=$(date +%Y%m%d)
export ftplog="${datestamp}.ftplog"

# 切换目录并做错误处理
cd "$files" || { echo "Failed to enter directory $files"; exit 1; }

for i in *.csv; do
    [ -f "$i" ] || continue

    mv -f "$i" "$archive/ESS09651.$i"
    
    # 用>>追加到日志文件,而不是>覆盖
    ftp -vn "$ftphostname" >> "$ftp/$ftplog" 2>&1 << EOF
quote USER $username
quote PASS $password
put $archive/ESS09651.$i ESS09651.$i
bye
EOF
done

脚本里的其他关键修复点

除了日志问题,你的原脚本还有几个潜在坑,一起修复掉:

  • 不要用ls遍历文件:for i in $(ls *.csv)会在文件名包含空格、特殊字符时出错,直接用for i in *.csv更安全,再加上[ -f "$i" ] || continue处理没有CSV文件的情况。
  • 变量必须加双引号:所有路径、文件名变量(比如$i、$archive、$ftp)都要用双引号包裹,避免空格或特殊字符导致的命令执行错误。
  • 确保datestamp已定义:原脚本里$datestamp没有定义,必须通过date命令生成,否则日志文件名会变成.ftplog,每次都会覆盖同一个文件!
  • 目录切换要做错误检查:如果cd $files失败,后续操作会在当前目录执行,可能找不到文件,所以加上|| exit 1或者错误提示。

内容的提问来源于stack exchange,提问作者T.alcock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:32:40