import os, sys

 def search(curpath, s):
L = os.listdir(curpath) #列出当前目录下所有文件
for subpath in L: #遍历当前目录所有文件
if os.path.isdir(os.path.join(curpath, subpath)): #若文件仍为目录,递归查找子目录
newpath = os.path.join(curpath, subpath)
search(newpath, s)
elif os.path.isfile(os.path.join(curpath, subpath)): #若为文件,判断是否包含搜索字串
if s in subpath:
print os.path.join(curpath, subpath) def main():
workingpath = os.path.abspath('.')
s = sys.argv[1]
search(workingpath, s) if __name__ == '__main__':
main()

PS: 关键分析红字部分

  如果直接使用 subpath ,因它只是一个文件名,故判断它是否为目录语句 os.path.isdir(subpath) 只会在当前目录下查找subpath文件;而不会随着search的递归而自动在更新路径下查找。比如:

+/home/freyr/
|
|--------dir1/
|            |
|            |-------file1
|            |-------file2
|
|--------dir2/
|
|--------file2

Step1、在主目录下遍历,subpath = dir1时,先判断是否为目录:os.path.isdir(subpath)其实就是os.path.isdir('/home/freyr/dir1')

Step2、dir1为目录,遍历dir1。subpath = file1时,同样先判断是否为目录:os.path.isdir(subpath)其实是os.path.isdir('/home/freyr/file1'),而不是os.path.isdir('/home/freyr/dir1/file1'),很明显/home/freyr下没有file1文件。这样造成的后果就是除了当前目录(一级目录)文件(如file2)可以搜索到,子目录内文件都是没有搜索到的,因为它每次都是跑到/home/freyr下搜索文件名

  其实简单的说,os.path.isdir()函数在这里使用绝对路径!

Python实现Linux下文件查找的更多相关文章

  1. Linux下文件查找命令find笔记

    在Linux命令下如果需要快速自己系统所需要处理的文件,可以通过find命令快速进行检索. 如果想在某个路径下查找相应的文件可以执行如下命令: find path -name filename # p ...

  2. linux下文件查找工具--find

    常用的文件查找命令有:which,locate,find 1.which命令 查找二进制数或二进制命令,由PATH给出 2.loacte 特点: 1.非实时,每天在系统上生成数据库,通过数据库查询 2 ...

  3. python实现linux下文件遍历

    import os def getAllFile(*names): if len(names) == 0: return "" else: allList = [] for nam ...

  4. Linux下快速查找文件

    1 locate 查找内容.查找数据库,updatedb命令更新数据库 2 which 命令 3 find 路径 -name 查找内容.find命令会磁盘查找,比较耗时. 4 grep 查找内容一般为 ...

  5. Linux下文件搜索、查找、查看命令

    Linux下文件搜索.查找.查看命令 1.最强大的搜索命令:find 查找各种文件的命令 2.在文件资料中查找文件:locate 3.搜索命令所在的目录及别名信息:which 4.搜索命令所在的目录及 ...

  6. Linux操作系统的文件查找工具locate和find命令常用参数介绍

    Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具  locate命 ...

  7. Linux下如何查找可执行文件

    Linux下的可执行文件 Linux下如何查找可执行文件,作为一个Linux小菜刚刚有了这个问题, 在windows中,可以通过后缀名判断是否是可执行文件,比如.exe,.bat等是可执行文件,但是在 ...

  8. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  9. linux 批量文件查找并替换

    linux 批量文件查找并替换 sed -i "s/oldstring/newstring/g" `grep oldstring -rl path` 如: sed -i " ...

随机推荐

  1. 基于html5实现的愤怒的小鸟网页游戏

    之前给大家分享一款基于html5 canvas和js实现的水果忍者网页版,今天给大家分享一款基于html5实现的愤怒的小鸟网页游戏.这款游戏适用浏览器:360.FireFox.Chrome.Safar ...

  2. 项目源码--Android新闻财经类商用要求源码

    技术要点: 1. 商用要求源码框架 2. 登录与注册用户系统模块 3. Android的Http通信以及多线程处理模块 4. Andorid的网络数据处理模块 5. Andorid的版本检测与升级模块 ...

  3. Java再学习——停止一个正在运行的线程

    关于这个问题,先了解一下Thread类方法中被废弃的那些方法.suspend(), resume(),stop()/stop(Throwable obj),destroy() 首先,stop(Thro ...

  4. C# 递归程序 获取某个节点下的全部子节点

    /// <summary> /// 获取组织结构树 /// </summary> /// <param name="list"></par ...

  5. [算法练习]最长公共子串(LCS)

    题目说明: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.比如"bab"和"caba"的最长公共子串是"ba"和" ...

  6. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29

    Google和苹果都试图给用户的汽车带来一个安全和友好的移动体验.Android Auto和CarPlay是这两家公司推出的专为车载而重新设计的移动用户界面,双方目前都在筹备着在明年正式大规模推广. ...

  7. Oracle 经典语法(五)

    1. 哪些部门的人数比20 号部门的人数多.SELECT DEPTNO,COUNT(*) FROM EMP     GROUP BY DEPTNO      HAVING COUNT(*) >  ...

  8. Sublime Text shift+ctrl妙用

    1 :按住shift+ctrl然后按←或→可快速选中一行中的某一部分,相当于双击鼠标选中. 当你想在代码末尾加注释的话,这个方法很好用 输入文字->光标移到文字末尾->按住shift+ct ...

  9. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  10. Umbraco(1) - Document Types(翻译文档)

    Document Types Data first nothing in = nothing out! 任何网站的第一步是创建一个"Document Type"-几次安装后你会熟悉 ...