home *** CD-ROM | disk | FTP | other *** search
- #/usr/local/bin/kermit +
- ;
- ; f t p d i r e c t o r y
- ;
- ; Gets a directory listing from an FTP server
- ; that shows the size and full modification date and time of each file.
- ; The date and time are in UTC (GMT).
- ;
- ; Illustrates: how to get remote file date/time and size from server.
- ; How to get a filename list from the server.
- ; How to get file date/time and size info from the server.
- ; How to read a local file.
- ;
- ; This example merely prints the file information but you could also
- ; use it to make decisions about whether to fetch each file, etc.
- ;
- ; Arguments:
- ; \%1 hostname (empty if you already have an FTP connection)
- ; \%2 username on host (empty for anonymous)
- ; \%3 directory on host (empty if you are already CD'd as desired)
- ; \%4 file specification (default "*")
- ;
- ; F. da Cruz, Columbia University, February 2003
- ;
- ; Modified Aug 2004 to show how to identify server directories.
-
- set quiet on ; No messages
- set exit warning off ; No warnings
- .listname := \v(tmpdir)ftplist.\v(pid) ; Temp file name
- if defined \%1 { ; Open FTP connection
- if defined \%2 { ; Log in as real user
- ftp open \%1 /user:\%2
- } else { ; or anonymously
- ftp open \%1 /anonymous
- }
- if fail exit 1 ; Check FTP OPEN
- } else if not \v(ftp_connected) { ; Check connection
- exit 1 "No FTP connection"
- }
- if not \v(ftp_loggedin) { ; Check if logged in
- exit 1 "Not logged in to FTP server"
- }
- if defined \%3 { ; CD to disired directory
- ftp cd \%3
- if fail exit 1 ; Check
- }
- if not def \%4 def \%4 * ; Default filespec if not given
-
- ftp mget /namelist:\m(listname) \%4 ; Get list of names into file
- if fail exit 1 ; Check
-
- fopen /read \%c \m(listname) ; Open name-list file
- if fail exit 1 ; Check
- while true { ; Loop to read each line
- fread /line \%c name ; Read a name
- if fail break ; Check for EOF
- ftp quote MDTM \m(name) ; Get file's modtime
- if fail exit 1 "Server does not support MDTM" ; Check
- .time := \v(ftp_message) ; Save
- ftp size \m(name) ; Get file's size
- if fail exit 1 "Server does not support SIZE" ; Check
- .size := \v(ftp_message) ; Save
-
- ; The next bit checks to see if the file is a directory.
- ; This works only if the server returns directory names in its NLST response.
- ; (Most servers do not.)
-
- undef dir ; Assume it's not a directory
- ftp cd \m(name) ; Try to CD to it
- if success { ; If it works...
- .dir = "(DIRECTORY)" ; it's a directory
- ftp cdup ; Go back up.
- }
- echo "\flpad(\m(size),12) \fcvtdate(\m(time)) \m(name) \m(dir)" ; Show info
- }
- fclose \%c ; Close name-list file
- delete \m(listname) ; Delete name-list file
- if def \%1 exit 0 ; BYE to server and exit Kermit
- end 0
-