打印某个路径下的所有文件,我们可以通过find命令实现(find 路径 -type f)。下面我通过 Python 的递归来实现这个功能。
[[email protected] ~]# vim print_files.py
#!/usr/bin/python
import os
import sys
def print_files(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
if files:
for f in files:
print os.path.join(path,f)
if dirs:
for d in dirs:
print_files(os.path.join(path,d))
print_files(sys.argv[1])
测试:
我们打印下/etc/目录下的所有目录和文件,效果如下图:
[[email protected] ~]# python print_files.py /etc/
方法说明:
os.listdir:os模块的方法,打印目录里的所有文件,以列表形式存在;后面就可以使用列表重写:[i for i in lsdir]
os.path.isdir:os.path下的方法,返回的是布尔值,判断后边是不是一个目录。
os.path.isfile:os.path下的方法,返回的也是布尔值,判断后边是不是一个文件。
os.path.join:os.path下的方法,连接文件路径。os.path.join(path,i) :/etc/i
sys.argv:sys模块下的方法,是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,本例:
sys.argv[0] ------- print_files.py
sys.argv[1] ------- path
逻辑思路:
(1)先列出路径下的所有文件
(2)过滤目录
(3)过滤文件
(4)判断目录下是否有文件,若有就打印出该文件
(5)判断目录下是否有子目录,若有就通过递归再遍历子目录下的文件或者目录。