【问题标题】:How to perform action on parts of a downloaded file如何对下载文件的某些部分执行操作
【发布时间】:2023-03-24 04:32:02
【问题描述】:

为问题的标题道歉,但我是。它确定如何最好地总结这一点。基本上我在服务器上托管了非常大的文本文件。我没有能力下载整个文件。我有一个要在文本文件的各个行上运行的 shell 脚本。有没有办法(ftp)下载文件的块并在这个块上执行 shell 脚本,然后下载下一个块(最好覆盖前一个块)以执行 shell 脚本等。

【问题讨论】:

标签: bash shell ftp


【解决方案1】:

您应该能够在FTP 模式下使用curl 执行此操作,方法是将输出更改为stdout 而不是本地文件名,然后使用ddheadtail 获得数据。

下面通过 FTP 连接到我的本地主机并获取文件 <HOME>/tmp/ppm.c,然后使用 dd 将块大小设置为 1k 并跳过第一个块,将输出写入文件 2nd1kB.txt

curl --output - --user user:password 'ftp://127.0.0.1/tmp/ppm.c' | dd bs=1024 skip=1 count=1 > 2nd1kB.txt

如果你想要多个块,你将需要一个循环。这里我只是从 0 循环到 3:

#!/bin/bash
for block in {0..3}; do
   echo Grabbing block $block
   curl --silent --output - --user user:password 'ftp://127.0.0.1/tmp/ppm.c' | dd bs=100 count=1 skip=$block > Block${block}.txt
done

【讨论】:

  • 那么这会下载第二个和第三个块吗?我将如何下载后续块?
  • 我已经更新以展示如何在一个循环中执行几个块。我实际上将每个块保存在不同的文件中以演示该技术。我猜你会想要覆盖以前的文件,所以你的命令将以dd bs=100 count=1 skip=$block > block.txt 结尾
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 2011-09-26
  • 2023-01-25
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多