【问题标题】:How to get the latest file with os.system using scp in python?如何在 python 中使用 scp 获取 os.system 的最新文件?
【发布时间】:2023-10-08 19:16:01
【问题描述】:

我想使用 python os.system 库从远程远程 UNIX 目录中获取/scp 最新文件夹,该目录是一个文件夹系统,其名称包括日期时间,例如:

[usr1@server1 stats_from_dir]$ pwd
/tmp/dir1/stats_from_dir

[usr1@server1 stats_from_dir]$ ls -alrth
drwxr-x---  2  23K Aug 28 12:50 pmexport_20200825
drwxr-x---  2  23K Aug 28 12:50 pmexport_20200826
drwxr-x---  2  21K Aug 28 12:50 pmexport_20200827

我可以得到所有这样的文件夹;

import os
    
get_files = 'scp -r usr1@10.1.1.39:/tmp/dir1/stats_from_dir/* /dir2/.'
    
os.system(get_files)

但我怎样才能只获得最新的文件夹?有没有办法在 os.system 库中使用参数来做到这一点,而不使用其他库,如 paramiko、subprocess ..etc?

【问题讨论】:

  • 你为什么要用os.system()而不是像paramiko这样的库?
  • 任何其他库的安装都是有限的..

标签: python scp os.system


【解决方案1】:

试试这个:

import os
    
get_files = "scp -r usr1@10.1.1.39:/tmp/dir1/stats_from_dir/$(ssh usr1@10.1.1.39 'ls -t /tmp/dir1/stats_from_dir/ | head -1') /dir2/."
    
os.system(get_files)

【讨论】:

    【解决方案2】:

    你知道文件夹的实际日期吗?

    假设最后一个文件夹是昨天

    然后用 dateetime.date 编译昨天的日期,用 datetime.timedelta 减去一天

    然后使用 strftime 以您需要的强格式转换昨天。

    最后,将那一天附加到您使用 os.system 的字符串中。

    import os
    import datetime
        
    
    yesterday = datetime.date.today() - datetime.timedelta(days=1)
    yesterday_string = yesterday.strftime('%Y%m%d')
    
    get_files = 'scp -r usr1@10.1.1.39:/tmp/dir1/stats_from_dir/pmexport_{} /dir2/.'.format(yesterday_string)
        
    os.system(get_files)
    

    【讨论】:

      最近更新 更多