Python实现Linux下文件查找

 1 import os, sys
 2
 3
 4 def search(curpath, s):
 5     L = os.listdir(curpath)  #列出当前目录下所有文件
 6     for subpath in L:  #遍历当前目录所有文件
 7         if os.path.isdir(os.path.join(curpath, subpath)):  #若文件仍为目录,递归查找子目录
 8             newpath = os.path.join(curpath, subpath)
 9             search(newpath, s)
10         elif os.path.isfile(os.path.join(curpath, subpath)):  #若为文件,判断是否包含搜索字串
11             if s in subpath:
12                 print os.path.join(curpath, subpath)
13
14 def main():
15     workingpath = os.path.abspath(‘.‘)
16     s = sys.argv[1]
17     search(workingpath, s)
18
19 if __name__ == ‘__main__‘:
20     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()函数在这里使用绝对路径!

时间: 2024-10-14 02:33:18

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

Linux下文件查找与定位

Linux下一切皆文件,但是文件由于文件的属性的不同,在查找上可以针对不同的文件做相应的查找以便加快查询速度和减少资源的消耗. 1 .   which 命令[可执行文件的查找,系统文件中检索]:此命令是查找显示可执行命令的路径和别名,通过查找可以确定在/sbin . /usr/sbin. /usr/bin .哪个目录下, 是在系统和用户环境变量中存在的目录文件中查找的. 参数 解释 --all,  -a Print all matching executables in  PATH, not j

Linux下文件查找

linux文件查找 find 文件查找 locate 文件查找:在文件系统上查找符合条件的文件 locate 依赖于事先构建好的索引库     查询系统上预建的文件索引数据库     /var/lib/mlocate/mlocate.db 系统自动实现,周期性任务. 手动创建跟新数据库(updatedb,非常消耗系统资源) 慎用! 工作特性:     查找速度快     模糊查找     非实时查找,可能文件已经有变动或不存在     locate [option]...PATTERN...  

Linux下文件查找工具介绍

文件查找工具 locate find locate: 查询系统预建的文件索引数据库      1. /var/lib/mlocate/mlocate.db     2.因为依赖于事先构建的索引,而索引是系统在闲时自动进行的,管理员需要手动更新(updatedb). locate的特点:查找速度快        模糊查找        非实时查找        搜索的是文件的全路径,不仅仅是文件名        可能只搜索用户具备读取和执行权限的目录 基本语法:   -i :不区分大小写的搜索  

python实现linux下文件遍历

import os def getAllFile(*names): if len(names) == 0: return "" else: allList = [] for name in names: fileAndDirString = os.popen("ls -l "+name).read() fileAndDirStringDo = "\n".join(fileAndDirString.split("\n")[1:-

linux系统下文件查找

在我们实际应用中,经常需要查找某个特定的文件,或者根据文件的某个特定属性进行查找,今天小菜就给大家分享一下,linux系统下文件查找的两大利器: 1,locate:非实时查找(基于预先生成的数据库查找):模糊匹配:速度快 2,find:实时查找(遍历目录中的所有文件完成查找):精确匹配,支持众多查找标准:速度慢 一.locate 查询系统上预先生成的文件索引数据库:/var/lib/mlocate/mlocate.db 依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务) 管

Linux 系统的下文件查找

Linux 系统下文件查找 1.which (1)作用:用于查找并显示给定命令的绝对路径 (2)语法:which(选项)(参数) (3)案例: [[email protected] ~]# which cd       #查找cd命令的路径 /usr/bin/cd [[email protected] ~]# which cp       #查找cp命令的路径 alias cp='cp -i' /usr/bin/cp 2.whereis (1)作用:来定位指令的二进制程序.源代码文件和man手册

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

Linux下文件搜索.查找.查看命令 1.最强大的搜索命令:find 查找各种文件的命令 2.在文件资料中查找文件:locate 3.搜索命令所在的目录及别名信息:which 4.搜索命令所在的目录及帮助文档路径:whereis5.在文件中搜寻字符串匹配的行并输出:grep6.分页显示一个文件或任何输出结果:more7.分页显示一个文件并且可以回头:less8.指定显示前多少行文件内容:head9.指定显示文件后多少行内容:tail10.查看一个文件:cat11.查看文件内容多少字符多少行多少字

【大话QT之五】Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

linux下批量查找/替换文本内容

一般在本地电脑上批量替换文本有许多工具可以做到,比如sublime text ,但大多服务器上都是无图形界面的,为此收集了几条针对linux命令行 实现批量替换文本内容的命令: 1.批量查找某个目下文件的包含的内容,例如: #   grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. #   sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./` linux下批量查找/替换文本内