【问题标题】:Unix Bash script - How to Limit for loop through files to only process 10 at a timeUnix Bash 脚本 - 如何将文件循环限制为一次仅处理 10 个文件
【发布时间】:2023-01-18 22:14:47
【问题描述】:

我正在用头撞墙,我确定我只是太笨了。

我正在尝试使用 lftp 命令对监视文件夹中的文件运行 for 循环,基本上是一个备份和移动过程。但是由于 LFTP 和循环的工作方式,如果我在完成所有操作之前处理目标上的文件,我会失败。

所以我想做的是用 *.log 读取所有文件,然后如果有 20 个文件只处理 10,那么在下一次运行时再次处理 10 个文件,最终它将一次处理 1 个文件。 我可以循环遍历一切。只是似乎无法弄清楚如何像我说的那样只读取前 10 个文件。

for FILE in *.log; do
lftp -p 2252 -u $FTPUser,$FTPPass $Location <<EOF
set ftp:ssl-allow no
set xfer:use-temp-file on
set xfer:temp-file-name *.tmp
set log:file/xfer /log/LFTP_$FILE.log;
mput $LogPath/$FILE
quit
EOF
   if [ $? == "0" ]; then
        rm $LogPath/$FILE
    else
        echo "Error"
    fi
done;

【问题讨论】:

    标签: bash for-loop unix


    【解决方案1】:

    使用数组:

    files=( "$LogPath"/*.log )
    
    lftp -p 2252 -u "$FTPUser,$FTPPass" "$Location" <<EOF
    set ftp:ssl-allow no
    set xfer:use-temp-file on
    set xfer:temp-file-name *.tmp
    set log:file/xfer /log/LFTP_$FILE.log;
    mput "$LogPath/${files[@]:0:10}"
    quit
    EOF
    

    说明

    ${files[@]:0:10}
    

    是一个参数扩展只检索前 10 个元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 2013-04-28
      • 1970-01-01
      • 2011-04-25
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多