2 回答
TA贡献1836条经验 获得超5个赞
如果您使用的是 Python 3,则可以使用Pathfrom pathlibmodule 和rglobfunction 来仅查找node_modules目录。这样,您将仅遍历循环node_modules中的目录for并排除其他文件
import os
import time
import shutil
from pathlib import Path
PATH = "/Users/wagnermattei/www"
now = time.time()
old = now - 1296000
for path in Path(PATH).rglob('node_modules'):
abs_path = str(path.absolute())
if os.path.getmtime(abs_path) < old:
print('Deleting: ' + abs_path)
shutil.rmtree(abs_path)
更新:如果您不想检查node_modules目录,其父目录之一是否也是 anode_modules并被删除。您可以使用os.listdir而不是非递归地列出当前目录中的所有目录,并将其与递归函数一起使用,以便您可以遍历目录树,并且始终先检查父目录,然后再检查其子目录。如果父目录是未使用的node_modules,则可以删除该目录并且不要进一步向下遍历到子目录
import os
import time
import shutil
PATH = "/Users/wagnermattei/www"
now = time.time()
old = now - 1296000
def traverse(path):
dirs = os.listdir(path)
for d in dirs:
abs_path = os.path.join(path, d)
if d == 'node_modules' and os.path.getmtime(abs_path) < old:
print('Deleting: ' + abs_path)
shutil.rmtree(abs_path)
else:
traverse(abs_path)
traverse(PATH)
TA贡献1813条经验 获得超2个赞
在 Python 中,列表推导式比 for 循环更有效。但我不确定它是否更适合调试。
你应该尝试这个:
[shutil.rmtree(os.path.join(root, _dir) \
for root, dirs, files in os.walk(PATH, topdown=False) \
for _dir in dirs \
if _dir == 'node_modules' and os.path.getmtime(os.path.join(root, _dir)) < old ]
添加回答
举报