专栏首页python3如何用python写一个简单的find命

如何用python写一个简单的find命

    对一个运维来说可能会经常去查找目录下的一些文件是否存在,最常用的就是find命令,它不仅可以查找文件也可以查找目录,find命令用法

查找文件

[root@node1 opt]# find /usr/ -type f -name df

/usr/bin/df

查找目录

[root@node1 opt]# find /usr/ -type d -name python

/usr/share/gcc-4.8.2/python

    现在就讲一些如何用python实现这个简单功能,这里先将一下python os.walk函数的用法

首先 通过walk函数获取指定目录下的所有文件和目录,walk默认返回一个列表里面分别是

(“父目录”,“当前目录下的目录”,当前目录下的文件)下面实例:

[root@-node1 tmp]# mkdir -p /tmp/project/code/
[root@-node1 tmp]# mkdir -p /tmp/project/docs
[root@-node1 tmp]# touch /tmp/project/docs/readme.md
In [23]:  import os
 
In [24]: res=os.wa
os.wait     os.wait3    os.wait4    os.waitpid  os.walk    
 
In [24]: res=os.walk('/tmp/project')
 
In [25]: print res
<generator object walk at 0x28989b0>
 
In [26]: for i in res:
   ....:     print i
   ....:    
('/tmp/project', ['code', 'docs'], [])
('/tmp/project/code', [], [])
('/tmp/project/docs', [], ['readme.md'])

现在来实现一个文件查找函数把

首先大家查找文件有两种情况:知道完整文件名,知道文件名部分。

在这个函数里面需要你输入两个必要参数就是查找文件的目录,查找文件名,剩下一个非必要参数是否使用模糊搜索(在不知道全部文件名的时候会用到)。

下面的逻辑是使用os.walk获取到指定目录下的tree信息,如果当前目录下的文件有名字与输入名字相同的请输出文件路径和名称

[root@node1 opt]# cat pro1.py 
def find_f(dir,word,use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        for file_name in tree_list[2]:
            if use_like == False:
                if word == file_name:
                    print "{path}/{file}".format(path=tree_list[0],file=file_name)
            else:
                if word in file_name:
                    print "{path}/{file}".format(path=tree_list[0],file=file_name)
find_f("/usr","ls")
[root@node1 opt]# python pro1.py 
/usr/bin/ls

当然你也可以同样使用这个逻辑查找目录

def find_d(dir,word,use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        for dir_name in tree_list[1]:
            if use_like == False:
                if word == dir_name:
                    print "{path}/{dir}".format(path=tree_list[0],dir=dir_name)
            else:
                if word in dir_name:
                    print "{path}/{dir}".format(path=tree_list[0],dir=dir_name)
find_d("/usr/","python")

现在你可以感觉写两段代码有点麻烦,想要精简一下,这样就实现了简单的find功能

def find(dir,word,type='f',use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        if type == "f":
            mt=2
        elif type == "d":
            mt=1
        else:
            print "This type %s is noexist" % type
        for name in tree_list[mt]:
            if use_like == False:
                if word == name:
                    print "{path}/{name}".format(path=tree_list[0],name=name)
            else:
                if word in name:
                    print "{path}/{name}".format(path=tree_list[0],name=name)
find('/usr','ls')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python实现的模板生成脚本

    最近项目需要,针对主项目提取一个小的基础版本,供于在新建项目时使用,所以就有这个python模板生成脚本,其作用如下:

    py3study
  • python 的路径操作

    os.sep 表示默认的文件路径分隔符,windows为\, linux为/ os.walk(spath): 用来遍历目录下的文件和子目录 os.listd...

    py3study
  • python3 __name__

    所以我们平常见到的__name__ == "__main__"就是指当前文件作为脚本运行时会发生的一些事情, 防止当前文件作为模块导入时运行自己不想运行的代码

    py3study
  • python3 __name__

    所以我们平常见到的__name__ == "__main__"就是指当前文件作为脚本运行时会发生的一些事情, 防止当前文件作为模块导入时运行自己不想运行的代码

    py3study
  • python实例:公司应用(一)

    需求:公司是做在线教育的,新谈的一家公司帮忙做视频录制,这个公司的录制是直接录到服务器上的,但是录制完之后的视频目录名称和视频名都不符合我们的要求,每次同事都得...

    py3study
  • tornado+jsonrpc

    json-rpc是一种非常轻量级的跨语言远程调用协议,实现及使用简单。方便语言扩展客户端的实现。

    用户1558882
  • 电商2.0时代:实体回归正当时

    从阿里巴巴成立算起,中国电子商务已有超过16年的历史了,如今电商GMV(商品交易总额)依然还在连年递增之中。电商仿佛是一颗常青树,以至于有观点认为未来一切商业皆...

    罗超频道
  • [快学Python3]目录与文件操作

    概述 本文就os和path模块中常用的方法进行了说明和列举,更多的方法和技巧请参加官方文档 os模块常用方法 我们先看看os模块所提供的目录操作方法,直接上代码...

    苦叶子
  • python 将ui转成py(和UI文件放在同一目录,运行)

    def listUiFile(): list = [] files = os.listdir(dir) for filename in files: #...

    用户5760343
  • Python3目录操作

    输出: 'D:\python\jupyter' 'D:\python' ['.ipynb_checkpoints', 'bak', 'jupyter', 'pr...

    py3study

扫码关注云+社区

领取腾讯云代金券