On Fri, Mar 29, 2002 at 01:52:10PM +0300, mulix wrote:
> On Fri, Mar 29, 2002 at 01:48:48PM +0300, Guy Cohen wrote:
> > He wants to do it over ftp.
>
> oh, missed that. well, that makes it a bit more interesting. easiest
> way would probably be to write a script in one's favorite scripting
> language which has an ftp module (perl and python do) which walks the
> directory structure and calls 'chmod' on each file. should be rather
> easy to implement (from scratch or modifying an example).
[replying to myself, shame on me]
#!/usr/bin/env python
# walk an ftp server and apply a command to each file
#
# (c) [EMAIL PROTECTED], GPL.
import ftplib, string
eInvalidServer = 'No server specified'
class FtpWalker:
ftp = None
visitme = []
cwd = None
command = None
def __init__(self, server, command = None, startdir = '/'):
if (server == None):
raise eInvalidServer
self.command = command
self.cwd = startdir
self.ftp = ftplib.FTP(server)
self.ftp.login()
self.ftp.cwd(self.cwd)
def ftp_callback(self, str):
print ("callback got: %s" % str)
details = string.split(str)
if (str[0] == 'd'): # directory, schedule a visit
name = details[8]
print "got a directory: %s" % name
self.visitme.append(self.cwd + name)
elif (str[0] == '-'): # regular file, apply the command to it
name = details[8]
print "got a file: %s" % name
if (self.command != None):
cmd = (self.command % name)
print "sending: %s" % cmd
resp = self.ftp.sendcmd(cmd)
print "%s returned %s" % (cmd, resp)
def walk(self):
self.ftp.dir(self.ftp_callback)
while (len(self.visitme)):
try:
newdir = self.visitme.pop()
self.ftp.cwd(newdir)
self.cwd = newdir + '/'
self.ftp.dir(self.ftp_callback)
except ftplib.error_perm, e:
print e # but continue
if __name__ == "__main__":
server = 'ftp.iglu.org.il' # name of your server here
command = 'SIZE %s' # (or whatever you want - %s for the file name)
startdir = '/' # of /path/to/my/directory
f = FtpWalker(server, command, startdir)
f.walk()
--
The ill-formed Orange
Fails to satisfy the eye: http://vipe.technion.ac.il/~mulix/
Segmentation fault. http://syscalltrack.sf.net/
=================================================================
To unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]