home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
ckscripts
/
ftpdirectory
< prev
next >
Wrap
Text File
|
2020-01-01
|
3KB
|
80 lines
#/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