changing owner (chown) programatically

OS X cmd line

I am using the following script to iterate through subdirectories and get the name of each subdirectory.  I need to change the owner to the name of the directory.  Using ListDir, I get the names of the directories.  However, using os.stat, I get the user id instead of the string name.  Is there a way to resolve this readily?  

PS One other problem with this script is that it lists the user id of the top directory repeatedly (instead of the user id of the subdirectories).  Observations/suggestions?

#example from python docs

import os,sys
from stat import *
def walktree(top,callback):
      '''recursively descend the directory tree rooted at top, calling the
callback function for eaach regular file'''

      for f in os.listdir(top):
            pathname = os.path.join(top,f)
            mode = os.stat(pathname)[ST_MODE]

            if S_ISDIR( mode ):
                  #it's a dir, recurse into it
                  walktree(pathname, callback)
            elif S_ISREG(mode):
                  #it's a file, call the callback fn
                  #unknown file type, print msg
                  print 'Skipping %s' % pathname

def visitfile( file,mode ):
      userid = os.stat(file)[ST_UID]
      print 'file is % s and userid is %s' % (file,userid)

if __name__ == '__main__':
      walktree( sys.argv[1],visitfile )
Who is Participating?
RichieHindleConnect With a Mentor Commented:
The 'pwd' module maps between usernames and user IDs.

So to print the username rather than the user ID:

import pwd

# of your script...

def visitfile( file,mode ):
     userid = os.stat(file)[ST_UID]
     username = pwd.getpwuid(userid)[0]
     print 'file is %s and username is %s' % (file, username)

To go the other way, and get the user ID from a username:

     uid = pwd.getpwnam(username)[2]

I don't know about your last problem - for me, your script prints the user IDs of the subdirectories correctly.  I'm not clear about " I need to change the owner to the name of the directory" - do you need to change the owner of the directory itself, or all the files within it?  What about a case like '/tmp/user1/user2/file'?  What should happen to each component?

jesterepsilonAuthor Commented:
Thanks for the response.  I'm going to try it out right now.  The 2nd problem was a mistake on my part.  The directory that I was reading was on a mapped drive, so the permissions on my mapping were all me (the userid that I connected with).
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.