使用 lftp 提取文件并遍历提取的文件

Extract files with lftp and iterate over the extracted files

我正在使用 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 获取文件。

不一定——但您可以打开 lftp 的下载日志,它会跟踪所有下载的文件。然后解析该日志的文件名并在您的 python 脚本中使用它。

xfer:log (boolean) when true, lftp logs transfers to a file from xfer:log-file setting.

xfer:log-file (path to file) the file to log transfers to. Default is ~/.local/share/lftp/transfer_log or ~/.lftp/transfer_log.

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

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