代码改变世界

linux find详解 查找大文件

2014-02-10 17:15  youxin  阅读(1083)  评论(0编辑  收藏  举报

find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

find的使用格式如下:

  $ find <指定目录> <指定条件> <指定动作>

  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

  - <指定条件>: 所要搜索的文件的特征。

  - <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

find的使用实例:

  $ find . -name 'my*'  (必须用引号括起来)

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件

  $ find . -name 'my*' -ls

搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

  $ find . -type f -mmin -10

(访问过用amin,修改过用mmin,文件状态改变过用cmin)

搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。 该命令提供的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。逻辑运 算符 and、or、not 的含义为:

(1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条 件都满足时,寻找条件才算满足。例如:

find –name ’tmp’ –xtype c -user ’inin’
% 该命令寻找三个给定条件都满足的所有文件

(2) or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足 时,寻找条件就算满足。例如:

find –name ’tmp’ –o –name ’mina*’
% 该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

(3) not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件 。例如:

find ! –name ’tmp’
% 该命令查询文件名不是’tmp’的所有文件。

需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。例:

find \(–name ’tmp’ –xtype c -user ’inin’ \)

该命令的各选项含义如下:

首先,下列各个选项中的 n 值可以有三种输入方式,假设 n 为20,则:

+20 表示20以后(21,22,23等)

-20 表示20以前(19,18,17等)

20 表示正好是20

以名称和文件属性查找。

-name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。

-lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符 *、?、[ ]。

-gid n 查找属于ID号为 n 的用户组的所有文件。

-uid n 查找属于ID号为 n 的用户的所有文件。

-group ’字串’ 查找属于用户组名为所给字串的所有的文件。

-user ’字串’ 查找属于用户名为所给字串的所有的文件。

-empty 查找大小为 0的目录或文件。

-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

-size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。

-type x 查找类型为 x 的文件,x 为下列字符之一:

b 块设备文件

c 字符设备文件

d 目录文件

p 命名管道(FIFO)

f 普通文件

l 符号链接文件(symbolic links)

更多:http://os.51cto.com/art/200908/141094_1.htm

二、find命令举例;
1、找出当前目录及子目录下修改日期比你的test.java更近的全部.java文件;
    find . -name '*.java' -newer test.java -print

2、找出当前目录及子目录下所有今天你修改过的java代码;
    find . -name '*.java' -mtime 0 -print

3、上面的文件中,哪些使用了awt库;
    find . -name '*.java' -mtime 0 -print | xargs grep 'java.awt'

4、找出“C:\”下除了“C:\windows”文件夹之外的所有文件
    find /cygdrive/c -path "/cygdrive/c/windows" -prune -o -print

5、找出上面文件中所有“.jar”结尾的文件
    find /cygdrive/c -path "/cygdrive/c/windows" -prune -o -name "*.jar" -print

6、找出当前的src目录下的".class"文件,并删除它们;
    find src -name '*.class' | xargs rm
    ps:删除之前最好先查看一下文件以确认 find src -name '*.class' | xargs ls -l 

7、删除当前的src目录下的所有".svn"文件夹;
    find src -name '.svn' | xargs rm -r


8、只查找当前目录下的文本文件,而不查找当前目录的子目录
    find . ! -name "." -type d -prune -o -type f -name "*.txt" -print

 

. 想查找当前目录及子目录下文件大小大于10M的所有文件

# find . -size +10000000c

-size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。

 find命令都是查找当前目录及其子目录。如果不想深入到子目录中,而是只查找当前一层目录,则可以:

# find . -maxdepth 1 -name “*.c”

 

 

linux查找包含指定内容的文件

grep -rn "set"  *

-r 是递归查找

-n 是显示行号

* : 表示当前目录所有文件,也可以是某个文件名

最简单的模式是grep "hello " * 

 

grep 'name' -r /

grep '指定内容' -r 目录

上述命令就是在根目录下递归查找包含name内容的文件

    -r 递归查找文件

    -e 从文件内容查找与正则表达式匹配的行

    –i 查时不区分大小写

    -c 查找匹配的行数

    -v 从文件内容查找不匹配指定字符串的行

# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expres

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行 

find / -type f -name “*.log” | xargs grep “ERROR” 

例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行

find . -name “*.in” | xargs grep “thermcontact”

 

 

使用 find 命令

find 命令是一个功能强大的工具,可以用于在文件系统中搜索和查找文件。结合 -size 选项,我们可以使用 find 命令来查找指定大小的文件。

以下是使用 find 命令查找大于 100 MB 的文件的示例:

find /path/to/directory -type f -size +100M

上述命令将在 /path/to/directory 目录中查找大于 100 MB 的文件。您可以根据需要更改目录路径和文件大小限制。

2. 使用 du 命令

du 命令用于计算文件或目录的磁盘使用情况。通过结合 -h(人类可读)和 -s(总结)选项,我们可以使用 du 命令查找和显示目录中文件的大小。

以下是使用 du 命令查找指定目录中最大的文件的示例:

du -ah /path/to/directory | sort -rh | head -n 10

上述命令将列出 /path/to/directory 目录中最大的 10 个文件,按照文件大小进行降序排序。

 

man du 

-a, --all
write counts for all files, not just directories

-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)

 

du -h --max-depth=1

du -h  --max-depth=2 | sort -n

 

sort:

-n, --numeric-sort
compare according to string numerical value


-r, --reverse
reverse the result of comparisons