Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get folder size using FtpLib

Tags:

python

ftp

ftplib

I'm using FtpLib (Python) to download a folder with files from an ftp server. But I want to know the size of the folder before I start downloading it.

In the documentation I found FTP.size(filename) but that's just for files and not for folders... I could loop through all the files in the folder but it is possible that the folder contains subfolders.

So does anyone know how to get the size of the folder using FtpLib?

like image 571
Frederik Voordeckers Avatar asked Dec 11 '25 14:12

Frederik Voordeckers


2 Answers

After some trial and error I found the solution.

It's based on Alex Thorntons solution but I kept in mind that there could be subfolders. When it's a folder, the ftp.cwd() command succeeds and the function is called recursively.

When the ftp.cwd() command throws an error, it was a file and we can get the file size. The type is set to "I" (images), this forces binary mode since the ftp.size() command is not allowed in ASCII mode.

def get_total_size(self, directory):
    size = 0
    for filename in self.ftp.nlst(directory):
        try:
            self.ftp.cwd(filename)
            size += self.get_total_size(filename)
        except:
            self.ftp.voidcmd('TYPE I')
            size += self.ftp.size(filename)
    return size
like image 66
Frederik Voordeckers Avatar answered Dec 13 '25 03:12

Frederik Voordeckers


def get_size(directory):
    size = 0
    for file in FTP.nlst(directory):
        size += FTP.size(file)
    return size
like image 30
anon582847382 Avatar answered Dec 13 '25 03:12

anon582847382