recursively remove all the directories and files which begin with '.'

A

albert kao

How do I recursively remove all the directories and files which begin
with '.'?
My test program rmdir.py does not do the job yet.
Please help.
Code:
#!c:/Python31/python.exe -u
import os
from shutil import *

root = "C:\\test\\com.comp.hw.prod.proj.war\\bin"

for curdir, dirs, files in os.walk(root):
  print (curdir)
  print (dirs)
  for d in dirs:
    print ("d " + d)
    if d.startswith('.'):
      print ("dotd " + os.path.join(curdir, d))
      rmtree(os.path.join(curdir, d))

C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
File "C:\python\rmdir.py", line 14, in <module>
rmtree(os.path.join(curdir, d))
File "C:\Python31\lib\shutil.py", line 235, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python31\lib\shutil.py", line 233, in rmtree
os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'
 
J

J

C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
 File "C:\python\rmdir.py", line 14, in <module>
   rmtree(os.path.join(curdir, d))
 File "C:\Python31\lib\shutil.py", line 235, in rmtree
   onerror(os.remove, fullname, sys.exc_info())
 File "C:\Python31\lib\shutil.py", line 233, in rmtree
   os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'

You don't have permissions to remove the subdir or file entries in the
..svn directory...

Maybe that file is still open, or still has a lock attached to it?
 
A

albert kao

C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
 File "C:\python\rmdir.py", line 14, in <module>
   rmtree(os.path.join(curdir, d))
 File "C:\Python31\lib\shutil.py", line 235, in rmtree
   onerror(os.remove, fullname, sys.exc_info())
 File "C:\Python31\lib\shutil.py", line 233, in rmtree
   os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'

You don't have permissions to remove the subdir or file entries in the
.svn directory...

Maybe that file is still open, or still has a lock attached to it?

I reboot my windows computer and run this script as administrator.
Do my script has a bug?
 
S

Sean DiZazzo

C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
 File "C:\python\rmdir.py", line 14, in <module>
   rmtree(os.path.join(curdir, d))
 File "C:\Python31\lib\shutil.py", line 235, in rmtree
   onerror(os.remove, fullname, sys.exc_info())
 File "C:\Python31\lib\shutil.py", line 233, in rmtree
   os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'
You don't have permissions to remove the subdir or file entries in the
.svn directory...
Maybe that file is still open, or still has a lock attached to it?

I reboot my windows computer and run this script as administrator.
Do my script has a bug?

Are the directory or files marked as read only?

See this recipe and the comment from Chad Stryker:

http://code.activestate.com/recipes/193736-clean-up-a-directory-tree/

"Although it is true you can use shutil.rmtree() in many cases, there
are some cases where it does not work. For example, files that are
marked read-only under Windows cannot be deleted by shutil.rmtree().
By importing the win32api and win32con modules from PyWin32 and adding
line like "win32api.SetFileAttributes(path,
win32con.FILE_ATTRIBUTE_NORMAL" to the rmgeneric() function, this
obstacle can be overcome."

It might not be your problem, but if it is, this had me stumped for a
few weeks before I found this comment!

~Sean
 
I

Irmen de Jong

C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
File "C:\python\rmdir.py", line 14, in<module>
rmtree(os.path.join(curdir, d))
File "C:\Python31\lib\shutil.py", line 235, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python31\lib\shutil.py", line 233, in rmtree
os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'
You don't have permissions to remove the subdir or file entries in the
.svn directory...
Maybe that file is still open, or still has a lock attached to it?

I reboot my windows computer and run this script as administrator.
Do my script has a bug?

Are the directory or files marked as read only?

See this recipe and the comment from Chad Stryker:

http://code.activestate.com/recipes/193736-clean-up-a-directory-tree/

"Although it is true you can use shutil.rmtree() in many cases, there
are some cases where it does not work. For example, files that are
marked read-only under Windows cannot be deleted by shutil.rmtree().
By importing the win32api and win32con modules from PyWin32 and adding
line like "win32api.SetFileAttributes(path,
win32con.FILE_ATTRIBUTE_NORMAL" to the rmgeneric() function, this
obstacle can be overcome."

It might not be your problem, but if it is, this had me stumped for a
few weeks before I found this comment!

~Sean

You should be able to do this with os.chmod as well (no extra modules
required). I'm not sure what the mode should be though. Perhaps 0777
does the trick.

-irmen
 
W

Walter Wefft

Irmen said:
C:\python>rmdir.py
C:\test\com.comp.hw.prod.proj.war\bin
['.svn', 'com']
d .svn
dotd C:\test\com.comp.hw.prod.proj.war\bin\.svn
Traceback (most recent call last):
File "C:\python\rmdir.py", line 14, in<module>
rmtree(os.path.join(curdir, d))
File "C:\Python31\lib\shutil.py", line 235, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python31\lib\shutil.py", line 233, in rmtree
os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'C:\\test\
\com.comp.hw.prod.proj.war\\bin\\.svn\\entries'

--
http://mail.python.org/mailman/listinfo/python-list

You don't have permissions to remove the subdir or file entries in the
.svn directory...

Maybe that file is still open, or still has a lock attached to it?

I reboot my windows computer and run this script as administrator.
Do my script has a bug?

Are the directory or files marked as read only?

See this recipe and the comment from Chad Stryker:

http://code.activestate.com/recipes/193736-clean-up-a-directory-tree/

"Although it is true you can use shutil.rmtree() in many cases, there
are some cases where it does not work. For example, files that are
marked read-only under Windows cannot be deleted by shutil.rmtree().
By importing the win32api and win32con modules from PyWin32 and adding
line like "win32api.SetFileAttributes(path,
win32con.FILE_ATTRIBUTE_NORMAL" to the rmgeneric() function, this
obstacle can be overcome."

It might not be your problem, but if it is, this had me stumped for a
few weeks before I found this comment!

~Sean

You should be able to do this with os.chmod as well (no extra modules
required). I'm not sure what the mode should be though. Perhaps 0777
does the trick.

-irmen

def make_readable(fpath):
'''
On windows, this will make a read-only file readable.
'''
mode = os.stat(fpath)[stat.ST_MODE] | stat.S_IREAD | stat.S_IWRITE
chmod(fpath, mode)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top