【问题标题】:Extract files with lftp and iterate over the extracted files使用 lftp 提取文件并遍历提取的文件
【发布时间】:2016-09-05 00:56:36
【问题描述】:

我正在使用lftp 从 FTP 服务器中提取一些 CSV 数据文件,使用以下命令:

lftp -e 'set ftp:use-mdtm false; set ftp:timezone Europe/Berlin; mirror --newer-than=now-1days --no-recursion --verbose -i "INERGIA.*\.csv" / /mnt/trailstone/itpf/DataInput; bye' -u [USERNAME],[PASSWORD] [SERVER-NAME]

这完美运行。但是,在提取 CSV 文件后,我想遍历它们中的每一个,以便使用 Python 脚本修改文件中的一些数据。有没有办法通过lftp 直接获取提取的文件,例如将它们分配给一个变量?

此时我只需执行以下操作:

cd "/mnt/trailstone/itpf/DataInput/"

for f in $(find *.csv -ctime -1) do 
   python /mnt/trailstone/itpf/OnlineDataProcessing/OnlineExtraDataDownloader/changeDelimiter.py $f
done 

但我更喜欢直接通过lftp 获取文件。

【问题讨论】:

    标签: python linux bash scripting lftp


    【解决方案1】:

    并非如此——但您可以打开 lftp 的下载日志,该日志将跟踪所有下载的文件。然后解析该日志以获取文件名并在您的 python 脚本中使用它。

    xfer:log (boolean) 当为真时,lftp 日志从 xfer:log-file 设置传输到文件。

    xfer:log-file (path to file) 日志传输到的文件。 默认为 ~/.local/share/lftp/transfer_log 或 ~/.lftp/transfer_log。

    【讨论】:

    • 好吧,也许lftp的输出方式不可用,但其他方式可以工作。
    【解决方案2】:

    我假设您想要这样做,因为 find 可能会在先前获取的 cvs 文件中命中最后状态意外更改的文件。

    我对 lftp 不太熟悉,但我可以想到一个解决方法: 让 lftp 将文件下载到临时位置,执行 python 操作,然后将修改后的文件移动到最终目的地。 或者,提取下载的文件列表 lftp 的标准输出(通过管道通过 awk 和 grep,或任何最适合您的方式),用它填充一个变量,然后用它而不是 $(find *.csv -ctime -1) 循环。

    【讨论】:

    • 是的,就是这样。我喜欢这个解决方法,因为这将确保我不会无意中将我的脚本应用到其他数据文件。非常感谢!
    猜你喜欢
    • 2023-02-08
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多