15个实用的Linux find命令介绍

更新时间:2014-06-17 点击量:1391

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

本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。

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

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作为查找名在当前目录及其子目录中查找文件的方法。

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. 使用mindepthmaxdepth限定搜索指定目录的深度

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

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 )

1

# find / -maxdepth 3 -name passwd

2

./usr/bin/passwd

 

3

./etc/pam.d/passwd

4

./etc/passwd

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

1

# find -mindepth 3 -maxdepth 5 -name passwd

2

./usr/bin/passwd

 

3

./etc/pam.d/passwd

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

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

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的文件或者目录。由于maxdepth1,所以只会显示当前目录下的文件和目录。

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的顺序是降序。

 

支付宝扫码打赏 微信打赏

如果文章对您有帮助,就打赏一个吧

在线客服

客户服务

热线电话:

0755-36656507 15889489919 服务时间:

周一到周六:9:00-18:00

在线QQ客服

在线微信客服

关于我们 常见问题

支付方式 加盟合作

提交需求
优惠红包 购物车0 反馈留言 返回顶部