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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python写一个简单的find命令相关的知识,希望对你有一定的参考价值。

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

查找文件

[[email protected] opt]# find /usr/ -type f -name df

/usr/bin/df

查找目录

[[email protected] opt]# find /usr/ -type d -name python

/usr/share/gcc-4.8.2/python

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

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

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

[[email protected] tmp]# mkdir -p /tmp/project/code/
[[email protected] tmp]# mkdir -p /tmp/project/docs
[[email protected] 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信息,如果当前目录下的文件有名字与输入名字相同的请输出文件路径和名称

[[email protected] 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")
[[email protected] 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‘)


本文出自 “运维之我的历程” 博客,请务必保留此出处http://nginxs.blog.51cto.com/4676810/1910525

以上是关于如何用python写一个简单的find命令的主要内容,如果未能解决你的问题,请参考以下文章

如何用python写一个简单的12306抢票软件

如何用IDLE编写python代码

如何用Python做爬虫?

如何用python写一首歌?

如何用ffmpeg截取视频片段&截取时间不准确的坑

如何用python / c程序替换“cat”和“echo”读/写命令?