GNU/Linux >> Belajar Linux >  >> Linux

Python FTP mendapatkan file terbaru berdasarkan tanggal

Mengapa Anda tidak menggunakan opsi direktori berikutnya?

ftp.dir('-t',data.append)

Dengan opsi ini, daftar file diatur waktunya dari terbaru ke terlama. Kemudian cukup ambil file pertama dalam daftar untuk mengunduhnya.


Bagi mereka yang mencari solusi lengkap untuk menemukan file terbaru di folder:

MLSD

Jika server FTP Anda mendukung MLSD perintah, solusinya mudah:

entries = list(ftp.mlsd())
entries.sort(key = lambda entry: entry[1]['modify'], reverse = True)
latest_name = entries[0][0]
print(latest_name)

DAFTAR

Jika Anda perlu mengandalkan LIST yang sudah usang perintah, Anda harus menguraikan daftar hak milik yang dikembalikannya.

Listingan *nix umum seperti:

-rw-r--r-- 1 user group           4467 Mar 27  2018 file1.zip
-rw-r--r-- 1 user group         124529 Jun 18 15:31 file2.zip

Dengan cantuman seperti ini, kode ini akan berfungsi:

from dateutil import parser

# ...

lines = []
ftp.dir("", lines.append)

latest_time = None
latest_name = None

for line in lines:
    tokens = line.split(maxsplit = 9)
    time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
    time = parser.parse(time_str)
    if (latest_time is None) or (time > latest_time):
        latest_name = tokens[8]
        latest_time = time

print(latest_name)

Ini adalah pendekatan yang agak rapuh.

MDTM

Cara yang lebih andal, tetapi kurang efisien, adalah menggunakan MDTM perintah untuk mengambil stempel waktu dari masing-masing file/folder:

names = ftp.nlst()

latest_time = None
latest_name = None

for name in names:
    time = ftp.voidcmd("MDTM " + name)
    if (latest_time is None) or (time > latest_time):
        latest_name = name
        latest_time = time

print(latest_name)

Untuk versi kode alternatif, lihat jawaban dari @Paulo.

Sakelar -t tidak standar

Beberapa server FTP mendukung -t non-standar beralih ke NLST (atau LIST ) perintah.

lines = ftp.nlst("-t")

latest_name = lines[-1]

Lihat Cara mendapatkan file di folder FTP yang diurutkan berdasarkan waktu modifikasi.

Mengunduh file yang ditemukan

Apa pun pendekatan yang Anda gunakan, setelah Anda memiliki latest_name , Anda mendownloadnya seperti file lainnya:

with open(latest_name, 'wb') as f:
    ftp.retrbinary('RETR '+ latest_name, f.write)

Lihat juga

  • Dapatkan nama folder FTP terbaru dengan Python
  • Cara mendapatkan waktu modifikasi file FTP menggunakan Python ftplib

Dengan NLST , seperti yang ditunjukkan dalam respons Martin Prikryl, Anda harus menggunakan sorted metode:

ftp = FTP(host="127.0.0.1", user="u",passwd="p")
ftp.cwd("/data")
file_name = sorted(ftp.nlst(), key=lambda x: ftp.voidcmd(f"MDTM {x}"))[-1]

Linux
  1. Metode Paling Efisien Untuk Mengosongkan Isi File?

  2. Dapatkan waktu pembuatan file dengan Python di linux

  3. cara menemukan pemilik file atau direktori dengan python

  1. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  2. Bagaimana cara mendapatkan PYTHONPATH di shell?

  3. Bagaimana cara mendapatkan direktori absolut dari sebuah file di bash?

  1. Linux – Bagaimana Cara Mendapatkan Tanggal Pembuatan File Pada Volume Logika Ntfs?

  2. Dapatkan file terbaru di direktori di Linux

  3. Cara hanya mendapatkan jumlah baris file