find 查找目录下的文件

1. 命令功能

find命令用于查到目录下的文件,同时也可以调用其它命令执行相应操作。

2. 语法格式

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

find  [-H] [-L] [-P] [-Olevel]  [pathname]  [expression]

find  [选项]            [ 路径 ]        [操作语句]

常见用法示例:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

3. 使用范例

1.基础使用范例

范例1: 在/下查找test.txt文件

[[email protected] ~]# find / -name "test.txt"

/root/test.txt

/home/test.txt

范例2: 查找指定时间内修改过的文件,查找在/home目录下1天内访问过的文件

[[email protected] home]# find /home -atime -1 # -atime 表示在多少天访问过;-1:1天内

/home

/home/test.txt

/home/cxf

/home/cxf/.bash_history

/home/cxf/ok

/home/cxf/ok/a

....

范例3: 查找在/home 2天内修改过的文件

/home/cxf/ok/a/b

/home/cxf/ok/a/b/c

/home/cxf/dir2

/home/cxf/dir2/123.txt

/home/cxf/.lesshst

范例4 :用-name指定关键字查找

[[email protected] home]# find /home -mtime -1 -name "*.txt"

/home/test.txt

/home/cxf/dir2/123.txt

范例5: 利用“!”反向查找

[[email protected] home]# find /home -type d  #在/home目录下查找目录 –type d表示目录

/home

/home/cxf

/home/cxf/ok

/home/cxf/ok/a

/home/cxf/ok/a/b

/home/cxf/ok/a/b/c

/home/cxf/dir2

/home/DIR

[[email protected] home]# find /home ! -type d   #查找不是目录的文件

/home/test.txt

/home/cxf/.bash_history

/home/cxf/.bash_logout

/home/cxf/.bashrc

/home/cxf/.bash_profile

/home/cxf/dir2/123.txt

范例6:按照目录或文件的权限来查找文件 -perm

[[email protected] home]# find /home -perm 755

/home

/home/cxf/ok

/home/cxf/ok/a

范例7:按大小查找文件

[[email protected] home]# find . -size +1000c | xargs ls -lhd

drwxr-xr-x. 4 root root 4.0K Mar 14 22:45 .

drwx------. 4 cxf  cxf  4.0K Mar 14 00:16 ./cxf

-rw-------. 1 cxf  cxf  4.4K Mar 14 00:18 ./cxf/.bash_history

drwxr-xr-x. 2 root root 4.0K Mar 14 00:17 ./cxf/dir2

范例 8:查找文件时希望忽略某个目录

准备工作:

[[email protected] home]# mkdir /home/data/{dir1,dir2,dir3} -p

[[email protected] home]# ls -l ./data/

total 12

drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir1

drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir2

drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir3

[[email protected] home]# ls ./data/{dir1,dir2,dir3}

./data/dir1:

file1.txt

./data/dir2:

file2.txt

./data/dir3:

file3.txt

查找/home/data目录下的文件,但是需要忽略/home/data/dir2目录

查到对比:

  1. 查找/home/data目录下的内容

[[email protected] home]# find /home/data

/home/data

/home/data/dir3

/home/data/dir3/file3.txt

/home/data/dir2

/home/data/dir2/file2.txt

/home/data/dir1

/home/data/dir1/file1.txt

  1. 忽略/home/data/dir2目录

[[email protected] home]# find /home/data -path "/home/data/dir2" -prune -o -print

/home/data

/home/data/dir3

/home/data/dir3/file3.txt

/home/data/dir1

/home/data/dir1/file1.txt

参数说明:find /home/data -path "/home/data/dir2" -prune -o –print

find /home/data 是查找指定目录/home/data下的内容

-path “/home/data/dir2”是查找/home/data/dir2目录

-o 表示取并集不在当前指定目录下查找

-prune表示

-print将匹配的文件输出到标准输出(默认功能,使用中可省略)

范例9 :忽略多个目录

[[email protected] home]# find /home/data \( -path /home/data/dir1 -o   -path  /home/data/dir3 \) -prune -o -print

/home/data

/home/data/dir2

/home/data/dir2/file2.txt

范例10: 使用user和nouser选项

[[email protected] test]$ ls -lh

total 4.0K

drwxrwxr-x. 2 cxf cxf 4.0K Mar 15 22:30 cxf_dir

-rw-rw-r--. 1 cxf cxf    0 Mar 15 22:30 cxf.txt

[[email protected] home]# find /home/cxf  -user cxf

/home/cxf

/home/cxf/.bash_history

/home/cxf/test

/home/cxf/test/cxf.txt

/home/cxf/test/cxf_dir

-user 表示有属主的文件;-nouser表示没有属主的文件。-nouser时查找哪些属主账号被删除的文件。 使用-nouser选项不必给出用户。

其中group和nogroup 与user用法一致。

范例11: find正则表达式

-name参数只支持“*”“?”“[]”这三个通配符,碰到复杂要求,就必须用到正则表达式。

find正则表达式语法如下:

find –pathname –repextype “type” –regex “pattern”

示例:

[[email protected] ~]# find / -regex ".*cxf"

/var/spool/mail/cxf

/home/cxf

范例:12: ls –l命令放在find命令的-exec选项中执行

[[email protected] home]# find . -type f -exec ls -l {} \;

-rw-------. 1 cxf cxf 4499 Mar 14 00:18 ./cxf/.bash_history

-rw-rw-r--. 1 cxf cxf 0 Mar 15 22:30 ./cxf/test/cxf.txt

-rw-r--r--. 1 cxf cxf 18 May 11  2016 ./cxf/.bash_logout

-rw-r--r--. 1 cxf cxf 124 May 11  2016 ./cxf/.bashrc

-rw-r--r--. 1 cxf cxf 176 May 11  2016 ./cxf/.bash_profile

-rw-------. 1 cxf cxf 51 Mar 13 11:39 ./cxf/.lesshst

-rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir3/file3.txt

-rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir2/file2.txt

-rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir1/file1.txt

说明:-exec后面跟的是command命令,最后以分号(;)作为结束标志。为了不让分号产生歧义分号前用\转义。

{}的作用:指代前面find命令查找的内容

上面命令可以用:find . -type f |xargs ls –l 替换

原文地址:https://www.cnblogs.com/joechu/p/8664339.html

时间: 2024-10-10 20:04:26

find 查找目录下的文件的相关文章

查找目录下的文件

1 import os 2 def check_file(start_dir, target): 3 os.chdir(start_dir) 4 for each_file in os.listdir(os.curdir): 5 if each_file == target: 6 print(os.path.join(os.getcwd(), each_file)) 7 if os.path.isdir(each_file): 8 check_file(each_file,target) 9 o

用python查找在指定目录下特定文件夹下的指定文件

本代码是在python2.*上边所写. 功能:在指定目录下查找特定文件夹下的特定文件. 实例:查找在packages目录下文件夹名为values下的strings.xml文件 #!/usr/bin/env python import os def walk_dir(path): filter_file_name = 'strings.xml' for root, dirs, files in os.walk(path): for dir_item in dirs: if dir_item ==

查找目录下的所有文件中是否含有某个字符串 linux

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式    (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.   (2)基本元字符集及其含义       ^ :只匹配行首.   如^a 匹配以a开头的行abc,

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" find .|xargs grep -ri "IBM" -l \ :只用来屏蔽一个元字符的特殊含义. 如\*,\',\",\|,\+,\^,\. 等       .:(点)只匹配任意单字符.       pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数.如a\{2\}匹配aa.       pattern\{n,\}:含义同上,但次数

linux查找目录下的所有文件中是否含有某个字符串 <zhuan>

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式 (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成. (2)基本元字符集及其含义 ^ :只匹配行首. 如^a 匹配以a开头的行abc,a2e,a12,aaa,.

Linux查找和替换目录下所有文件中字符串(转载)

转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹下包含字符串的文件 例:查找/usr/local目录下所有包含”rubyer.me”的文件. grep -lr 'rubyer.me' /usr/local/* vim替换单个文件中所有字符串方法 例:替换当前文件中所有old为new :%s/old/new/g #%表示替换说有行,g表示替换一行中

查找目录下匹配.py或者.txt的文件

#!/usr/bin/python def endWith(s,*endstring_1):       #*代表允许传输多个参数,名称统一为endstring为元祖,**为字典 array = map(s.endswith,endstring_1)  #map(调用的函数名称,给这个函数传的参数) if True in array: return True else: return False if __name__ == '__main__': import os s = os.listdi

windows下查找一个目录下所有文件内容

遇到这个问题的背景是我反编译了一个apk,得到了它的source code.我在jd-gui中查找一个String时,发现查找结果严重不全,于是我想,如果不用jd-gui自带的搜索功能,而直接从源码文件夹中查找这个String就好了. 但windows自带的查找功能,只能查找目录下的文件名,而无法查找文件内容.总不能把文件一个一个都打开,然后挨个find一遍吧? 办法总是有的,答案就是万能的notepad++(我爱notpad++): 首先ctrl+f,出现文件查找的框以后,点击第三个tab,就

Go实现查找目录下(包括子目录)替换文件内容

[功能] 按指定的目录查找出文件,如果有子目录,子目录也将进行搜索,将其中的文件内容进行替换. [缺陷] 1. 没有过滤出文本文件 2. 当文件过大时,效率不高 [代码] package main import ( "flag" "fmt" "io/ioutil" "os" "path/filepath" "strings" ) type ReplaceHelper struct { R