如何用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‘)
时间: 2024-10-17 05:04:10

如何用python写一个简单的find命令的相关文章

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

所谓抢票实际上是在开始放票的一瞬间第一个发出请求并点击预订.作为程序员的我们,完全可以让程序来做这件事.我花了几个小时写了一个demo.用到的工具集有:Python3.6, Selenium, chromdriver. 程序本身就是流程性的东西,没有什么可介绍的.代码如下 #coding=utf-8 from selenium import webdriver from time import sleep import traceback TICKET_URI = 'https://kyfw.1

如何用 Python 写一个简易的抽奖程序

不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下手. 其实这个很正常,刚开始学习写代码,都是跟着别人的套路往下写,看的套路少,很难形成自己的套路,这就和做数学题是一样的,做一道题就想会所有的题目,这个可能性微乎其微,都是通过大量的练习来摸索到自己的套路. 正好快过年了,各个公司都会搞一些抽奖活动,小编今天就来聊一下,如果要写一个简单的抽奖程序,小

如何用Python写一个贪吃蛇AI

前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD,它把矩形中出现的食物吃了个遍, 然后华丽丽地把整个矩形填满,真心是看得赏心悦目.作为一个CSer, 第一个想到的是,这东西是写程序实现的(因为,一般人干不出这事. 果断是要让程序来干的)第二个想到的是,写程序该如何实现,该用什么算法? 既然开始想了,就开始做.因为Talk is cheap,要sho

如何用Python搭建一个简单的推荐系统?

推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小组整理.它包含1,10和2亿个评级. Movielens还有一个网站,我们可以注册,撰写评论并获得电影推荐.接下来我们就开始实战演练. 在这篇文章中,我们会使用Movielens构建一个基于item的简易的推荐系统.在开始前,第一件事就是导入pandas和numPy. import pandas a

python写一个简单的接口

写一个接口: 1.用到的模块是flask,flask是一个python的一个web框架,可以用来开发接口和web页面 2. 启动服务的效果是这样的: 用postman测试的结果:

Python运维三十六式:用Python写一个简单的监控系统

市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库“falcon”,建表语句如下: 1 CREATE TABLE `stat` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `host` varchar(256) DEFAULT NULL, 4 `mem_fr

Python写一个简单的爬虫

code #!/usr/bin/env python # -*- coding: utf-8 -*- import requests from lxml import etree class Main: def __init__(self): self.headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69

如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个iPhone/iPad开发者,能够自己写一个简单的web服务器将是很有用的. 例如,你可能希望在软件启动时显示一些来自服务器的更新,或者在服务器端保存一些用户数据.除了你的想象力,没有什么能限制你了. 在第一篇中,我们将会一步一步的建立一个web服务器,基于promo code system(促销码系

用python写一个专业的传参脚本

问:linux系统命令如ls,它有几十个参数,可带一个或多个参数,可不分先后,用起来是非常的专业.但是自己写的传参脚本,一般只传一个参数,如果传多个,也是固定的顺序,那么如何用python写出更专业的传参脚本呢? 答:使用python自带的getopt模块. 1.语法: import getopt getopt.getopt(args,shortopts, longopts=[]) #函数示例:getopt.getopt(sys.argv[1:],'u:p:P:h',["username=&qu