有时候需要删除某个文件夹及其子文件夹下面的某个类型的所有文件, 比如所有的txt文档,所有的非cpp文档等等,这可以编写 Python 脚本实现。

其实这个需求由来已久,因为之前一直听说编写python脚本能够简化日常工作,确实,要是自己手动删除很麻烦。但是一直也没有自己去实践过,后来发现在 Mac 上的一些文件夹里总有一些隐藏的 .DS_Store 文件,由于我在Mac上一般是不显示隐藏文件的,所以看不到,也没有管它,可是转移文件到Windows上时,我在Windows上一般是显示隐藏文件和文件扩展名的,导致出现了这些 .DS_Store 文件,很是烦人,所以想到了用Python批量删除的办法。当然,关于 .DS_Store 文件有解决办法,这个之后再说。

比如如下用LaTeX 写的的“决策树学习笔记”,文件夹如下: 

python删除Android文件夹下所有文件 python删除文件夹中的文件_隐藏文件

可以看到,这里有3个隐藏文件,除此之外,子文件夹figures 下面也有一堆隐藏文件,如下 

python删除Android文件夹下所有文件 python删除文件夹中的文件_Python_02

实际上,只要在Mac上打开过这个文件,几乎都会产生一个类似的隐藏文件。

下面编写Python脚本,网上类似的代码很多,我主要参考了这篇文章 http://www.2cto.com/kf/201301/183354.html 也不错,我用的是 Python 2.7.10, 代码文件命名为remove.py, 如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
def del_files(path):
    for root, dirs, files in os.walk(path):
        for name in files:
            if name.startswith("."):
                os.remove(os.path.join(root, name))
                print("Delete File: " + os.path.join(root, name))
# test
if __name__ == "__main__":
    path = 'D:\MyDownload\决策树学习笔记'
    del_files(path)

然后进入命令行,输入 

python删除Android文件夹下所有文件 python删除文件夹中的文件_Python_03

结果发现隐藏文件还是存在,猜测应该是中文目录的问题,于是我把“决策树学习笔记”重命名为了decisiontree, 相应地把代码中的路径改为“D:\MyDownload\decisiontree”,完整代码如下

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
def del_files(path):
    for root, dirs, files in os.walk(path):
        for name in files:
            if name.startswith("."):
                os.remove(os.path.join(root, name))
                print("Delete File: " + os.path.join(root, name))
# test
if __name__ == "__main__":
    path = 'D:\MyDownload\decisiontree'
    del_files(path)

然后在命令行再次运行,结果如下 

python删除Android文件夹下所有文件 python删除文件夹中的文件_Python_04

可以看到,已经删除成功了 

python删除Android文件夹下所有文件 python删除文件夹中的文件_Python_05

而且figures文件夹中的隐藏文件也全部都删除掉了,大功告成!

下面再说一下 .DS_Store 等隐藏文件,可以参考 https://www.zhihu.com/question/20345704 ,如果不想再Mac生成这些文件的话,在终端中输入

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

然后重启电脑就行了。