Je souhaite utiliser la bibliothèque python os.system pour obtenir / scp le dernier dossier à partir d'un répertoire UNIX distant distant, qui est un système de dossiers avec des noms incluant datetime tels que:

[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

Je peux obtenir tous les dossiers comme celui-ci;

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

Mais comment puis-je obtenir uniquement le dernier dossier? Existe-t-il un moyen de le faire dans la bibliothèque os.system avec des paramètres sans utiliser d'autres bibliothèques telles que paramiko, sous-processus ..etc?

0
canarcho 28 août 2020 à 14:43

2 réponses

Meilleure réponse

Essaye celui-là:

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
abdullahkhawer 28 août 2020 à 12:00

Connaissez-vous la date réelle du dossier?

En supposant que le dernier dossier est hier

Puis compilez la date d'hier avec dateetime.date et soustrayez un jour en utilisant datetime.timedelta

Puis tournez hier dans le format fort dont vous avez besoin avec strftime.

Enfin, ajoutez ce jour à votre chaîne pour laquelle vous utilisez 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)
0
S.D. 28 août 2020 à 12:00