15个实用的Linux find命令示例

除了在一个目录结构下查找文件这种基本的操做,你还能够用find命令实现一些实用的操做,使你的命令行之旅更加简易。 node

本文将介绍15种不管是于新手仍是老鸟都很是有用的Linux find命令。 vim

首先,在你的home目录下面建立下面的空文件,来测试下面的find命令示例。 bash

01 # vim create_sample_files.sh
02 touch MybashProgram.sh
03 touch mycprogram.c
04 touch MyCProgram.c
05 touch Program.c
06  
07 mkdir backup
08 cd backup
09  
10 touch MybashProgram.sh
11 touch mycprogram.c
12 touch MyCProgram.c
13 touch Program.c
14  
15 # chmod +x create_sample_files.sh
16  
17 # ./create_sample_files.sh
18  
19 # ls -R
20 .:
21 backup                  MybashProgram.sh  MyCProgram.c
22 create_sample_files.sh  mycprogram.c      Program.c
23  
24 ./backup:
25 MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c

1. 用文件名查找文件

这是find命令的一个基本用法。下面的例子展现了用MyCProgram.c做为查找名在当前目录及其子目录中查找文件的方法。 socket

1 # find -name "MyCProgram.c"
2 ./backup/MyCProgram.c
3 ./MyCProgram.c

2.用文件名查找文件,忽略大小写

这是find命令的一个基本用法。下面的例子展现了用MyCProgram.c做为查找名在当前目录及其子目录中查找文件的方法,忽略了大小写。 测试

1 # find -iname "MyCProgram.c"
2 ./mycprogram.c
3 ./backup/mycprogram.c
4 ./backup/MyCProgram.c
5 ./MyCProgram.c

3. 使用mindepth和maxdepth限定搜索指定目录的深度

在root目录及其子目录下查找passwd文件。 spa

1 # find / -name passwd
2 ./usr/share/doc/nss_ldap-253/pam.d/passwd
3 ./usr/bin/passwd
4 ./etc/pam.d/passwd
5 ./etc/passwd

在root目录及其1层深的子目录中查找passwd. (例如root — level 1, and one sub-directory — level 2) 命令行

1 # find -maxdepth 2 -name passwd
2 ./etc/passwd

在root目录下及其最大两层深度的子目录中查找passwd文件. (例如 root — level 1, and two sub-directories — level 2 and 3 ) ip

1 # find / -maxdepth 3 -name passwd
2 ./usr/bin/passwd
3 ./etc/pam.d/passwd
4 ./etc/passwd

在第二层子目录和第四层子目录之间查找passwd文件。 md5

1 # find -mindepth 3 -maxdepth 5 -name passwd
2 ./usr/bin/passwd
3 ./etc/pam.d/passwd

4. 在find命令查找到的文件上执行命令

下面的例子展现了find命令来计算全部不区分大小写的文件名为“MyCProgram.c”的文件的MD5验证和。{}将会被当前文件名取代。 rem

1 find -iname "MyCProgram.c" -exec md5sum {} \;
2 d41d8cd98f00b204e9800998ecf8427e  ./mycprogram.c
3 d41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.c
4 d41d8cd98f00b204e9800998ecf8427e  ./backup/MyCProgram.c
5 d41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c

5. 相反匹配

显示全部的名字不是MyCProgram.c的文件或者目录。因为maxdepth是1,因此只会显示当前目录下的文件和目录。

1 find -maxdepth 1 -not -iname "MyCProgram.c"
2 .
3 ./MybashProgram.sh
4 ./create_sample_files.sh
5 ./backup
6 ./Program.c

6. 使用inode编号查找文件

任何一个文件都有一个独一无二的inode编号,借此咱们能够区分文件。建立两个名字类似的文件,例如一个有空格结尾,一个没有。

1 touch "test-file-name"
2  
3 # touch "test-file-name "
4 [Note: There is a space at the end]
5  
6 # ls -1 test*
7 test-file-name
8 test-file-name

从ls的输出不能区分哪一个文件有空格结尾。使用选项-i,能够看到文件的inode编号,借此能够区分这两个文件。

1 ls -i1 test*
2 16187429 test-file-name
3 16187430 test-file-name

你能够以下面所示在find命令中指定inode编号。在此,find命令用inode编号重命名了一个文件。

1 find -inum 16187430 -exec mv {} new-test-file-name \;
2  
3 # ls -i1 *test*
4 16187430 new-test-file-name
5 16187429 test-file-name


你能够在你想对那些像上面同样的糟糕命名的文件作某些操做时使用这一技术。例如,名为file?.txt的文件名字中有一个特殊字符。若你想执行“rm file?.txt”,下面所示的全部三个文件都会被删除。因此,采用下面的步骤来删除"file?.txt"文件。

1 ls
2 file1.txt  file2.txt  file?.txt

找到每个文件的inode编号。

1 ls -i1
2 804178 file1.txt
3 804179 file2.txt
4 804180 file?.txt

以下所示: 使用inode编号来删除那些具备特殊符号的文件名。

1 find -inum 804180 -exec rm {} \;
2  
3 # ls
4 file1.txt  file2.txt
5 [Note: The file with name "file?.txt" is now removed]

7. 根据文件权限查找文件

下面的操做时合理的:

  • 找到具备指定权限的文件
  • 忽略其余权限位,检查是否和指定权限匹配
  • 根据给定的八进制/符号表达的权限搜索

此例中,假设目录包含如下文件。注意这些文件的权限不一样。

1 ls -l
2 total 0
3 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
4 -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
5 ---------- 1 root root 0 2009-02-19 20:31 no_for_all
6 -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
7 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
8 ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read

找到具备组读权限的文件。使用下面的命令来找到当前目录下对同组用户具备读权限的文件,忽略该文件的其余权限。

1 find . -perm -g=r -type f -exec ls -l {} \;
2 -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read
3 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all
4 ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
5 -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read

找到对组用户具备只读权限的文件。

1 find . -perm g=r -type f -exec ls -l {} \;
2 ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

找到对组用户具备只读权限的文件(使用八进制权限形式)。

1 find . -perm 040 -type f -exec ls -l {} \;
2 ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

8. 找到home目录及子目录下全部的空文件(0字节文件)

下面命令的输出文件绝大多数都是锁定文件盒其余程序建立的place hoders

1 find ~ -empty

只列出你home目录里的空文件。

1 find . -maxdepth 1 -empty


 只列出当年目录下的非隐藏空文件。

1 find . -maxdepth 1 -empty -not -name ".*"

9. 查找5个最大的文件

下面的命令列出当前目录及子目录下的5个最大的文件。这会须要一点时间,取决于命令须要处理的文件数量。

1 find . -type f -exec ls -s {} \; | sort -n -r | head -5

10. 查找5个最小的文件

方法同查找5个最大的文件相似,区别只是sort的顺序是降序。

1 find . -type f -exec ls -s {} \; | sort -n  | head -5

上面的命令中,极可能你看到的只是空文件(0字节文件)。如此,你可使用下面的命令列出最小的文件,而不是0字节文件。

1 find . -not -empty -type f -exec ls -s {} \; | sort -n  | head -5

11. 使用-type查找指定文件类型的文件

只查找socket文件

1 find . -type s

查找全部的目录

1 find . -type d

查找全部的通常文件

1 find . -type f

查找全部的隐藏文件

1 find . -type f -name ".*"

查找全部的隐藏目录

1 find -type d -name ".*"

12. 经过和其余文件比较修改时间查找文件

显示在指定文件以后作出修改的文件。下面的find命令将显示全部的在ordinary_file以后建立修改的文件。

01 ls -lrt
02 total 0
03 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
04 ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
05 -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
06 -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
07 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
08 ---------- 1 root root 0 2009-02-19 20:31 no_for_all
09  
10 # find -newer ordinary_file
11 .
12 ./everybody_read
13 ./all_for_all
14 ./no_for_all

13. 经过文件大小查找文件

使用-size选项能够经过文件大小查找文件。

查找比指定文件大的文件

1 find ~ -size +100M

查找比指定文件小的文件

1 find ~ -size -100M

查找符合给定大小的文件

1 find ~ -size 100M

注意: – 指比给定尺寸小,+ 指比给定尺寸大。没有符号表明和给定尺寸彻底同样大。

14. 给经常使用find操做取别名

若你发现有些东西颇有用,你能够给他取别名。而且在任何你但愿的地方执行。

经常使用的删除a.out文件。

1 alias rmao="find . -iname a.out -exec rm {} \;"
2 # rmao

删除c程序产生的core文件。

1 alias rmc="find . -iname core -exec rm {} \;"
2 # rmc

15. 用find命令删除大型打包文件

下面的命令删除大于100M的*.zip文件。

1 find / -type f -name *.zip -size +100M -exec rm -i {} \;"

用别名rm100m删除全部大雨100M的*.tar文件。使用一样的思想能够建立rm1g,rm2g,rm5g的一类别名来删除全部大于1G,2G,5G的文件。

1 alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
2 # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"
3 # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"
4 # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"
5  
6 # rm100m
7 # rm1g
8 # rm2g
9 # rm5g

Find命令示例(第二部分)

相关文章
相关标签/搜索