Lo típico es usar el comando ls que tiene muchisimas opciones, pero su uso normal es:

Otra manera es usar el comando find sin parámetros:

Hoy he aprendido una nueva: tree. ¿Quién necesita entorno gráfico? jejeje
Porque no todo en la vida va a ser SIG Libre...
En python3 sería:

A menudo hay que acceder a un ftp y bajarse gran número de ficheros con un determinado nombre de diferentes directorios. Automatizar este proceso puede ser bastante útil en muchos casos. Usar un cliente FTP gráfico no suele ser de ayuda en estos casos. Los clientes FTP en línea de comandos son interactivos por lo que no se pueden realizar scripts con ellos, más allá de ejecutar una lista de comandos predefinida.
Este simple script se conecta a un servidor, se posiciona en la carpeta 'CATASTRO', y se accede a todos los directorios con profundidad '1' guardando los ficheros que interesan, en este caso shapefiles llamados MASA, en una carpeta local.
#!/usr/bin/python
# DESCRIPTION: Python script that connects to a FTP server and
# gets some Shapefiles from 'CATASTRO' folder and subfolders
# AUTHOR: Nacho Uve
# DATE : May 2008
# LICENSE: GPL2 or greater
from ftplib import FTP
ftp = FTP('server.com');
ftp.login(user='myuser', passwd='mypassword')
ftp.cwd("CATASTRO");
# OPTION: To get a 'ls -l' list
# dirs = []
# # Used a callback to 'dirs'
# ftp.dir(dirs.append)
dirs = ftp.nlst()
for row in dirs:
print row
ftp.cwd(row)
# Save shapefiles in the local machine with the first word of the folder as filename
ftp.retrbinary('RETR MASA.SHP', open(row.split()[0]+'.shp','wb').write)
ftp.retrbinary('RETR MASA.SHX', open(row.split()[0]+'.shx','wb').write)
ftp.retrbinary('RETR MASA.DBF', open(row.split()[0]+'.dbf','wb').write)
ftp.cwd('..')
ftp.quit()