使用:
foldercleanup.py -d 10 -k c:\test\keepfile.txt c:\test
表示对c:\test目录只保留最近10天的子文件夹和keepfile.txt中指定的子文件夹。
代码:
import
os
import
os.path
import
datetime
def
getOption():
from
optparse
import
OptionParser
des
=
"
clean up the folder with some options
"
prog
=
"
foldercleanup
"
ver
=
"
%prog 0.0.1
"
usage
=
"
%prog [options] foldername
"
p
=
OptionParser(description
=
des, prog
=
prog, version
=
ver, usage
=
usage,add_help_option
=
True)
p.add_option(
'
-d
'
,
'
--days
'
,action
=
'
store
'
,type
=
'
string
'
,dest
=
'
days
'
,help
=
"
keep the subfolders which are created in recent %days% days
"
)
p.add_option(
'
-k
'
,
'
--keepfile
'
,action
=
'
store
'
,type
=
'
string
'
,dest
=
'
keepfile
'
,help
=
"
keep the subfolders which are recorded in text file %keepfile%
"
)
options, arguments
=
p.parse_args()
if
len(arguments)
!=
1
:
print
(
"
error: must input one directory as only one parameter
"
)
return
return
options.days, options.keepfile, arguments[0]
def
preCheckDir(dir):
if
(
not
os.path.exists(dir)):
print
(
"
error: the directory your input is not existed
"
)
return
if
(
not
os.path.isdir(dir)):
print
(
"
error: the parameter your input is not a directory
"
)
return
return
os.path.abspath(dir)
def
isKeepByDay(dir, day):
indays
=
False
if
( day
is
not
None) :
t
=
os.path.getctime(dir)
today
=
datetime.date.today()
createdate
=
datetime.date.fromtimestamp(t)
indate
=
today
-
datetime.timedelta(days
=
int(day))
print
(createdate)
if
(createdate
>=
indate):
indays
=
True
print
(indays)
return
indays
def
isKeepByKeepfile(dir, keepfile):
needkeep
=
False
print
(dir)
if
(keepfile
is
not
None):
try
:
kf
=
open(keepfile,
"
r
"
)
for
f
in
kf.readlines():
print
(f)
if
(dir.upper().endswith(
"
\\
"
+
f.strip().upper())):
needkeep
=
True
kf.close()
except
:
print
(
"
error: keep file cannot be opened
"
)
print
(needkeep)
return
needkeep
def
removeSubFolders(dir, day, keepfile):
subdirs
=
os.listdir(dir)
for
subdir
in
subdirs:
subdir
=
os.path.join(dir,subdir)
if
(
not
os.path.isdir(subdir)):
continue
print
(
"
----------------------
"
)
if
( (
not
isKeepByDay(subdir, day))
and
(
not
isKeepByKeepfile(subdir, keepfile))):
print
(
"
remove subfolder:
"
+
subdir)
import
shutil
shutil.rmtree(subdir,True)
def
FolderCleanUp():
(day, keepfile, dir)
=
getOption()
dir
=
preCheckDir(dir)
if
dir
is
None:
return
removeSubFolders(dir,day,keepfile)
if
__name__
==
'
__main__
'
:
FolderCleanUp()
对目录下保留最后的zip文件:
def
KeepLastNumZips(num)
def
extractTime(f):
return
os.path.getctime(f)
zipfiles
=
[os.path.join(zipdir, f)
for
f
in
os.listdir(zipdir)
if
os.path.splitext(f)[
1
]
==
"
.zip
"
]
if
len(zipfiles)
>
num:
zipfiles.sort(key
=
extractTime, reverse
=
True)
for
i
in
range(num, len(zipfiles)):
os.remove(zipfiles[i])
完!