使用lftp提取文件并迭代提取的文件

时间:2016-05-10 07:26:35

标签: python linux bash scripting lftp

我使用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

获取文件

2 个答案:

答案 0 :(得分:1)

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

  

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

     

xfer:log-file(文件路径)要记录的文件传输到。   默认为〜/ .local / share / lftp / transfer_log或〜/ .lftp / transfer_log。

答案 1 :(得分:1)

我想你想要这样做是因为查找可能会在先前获取的cvs文件中意外更改上次状态的文件。

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