设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

妈咪,我找到了! -- 15个实用的Linux find命令示例

2013-9-27 10:20| 发布者: 红黑魂| 查看: 2200| 评论: 0|来自: 开源中国编译

摘要: 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易。本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。首先,在你的home目录下面创建下 ...

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

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


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


01# vim create_sample_files.sh
02touch MybashProgram.sh
03touch mycprogram.c
04touch MyCProgram.c
05touch Program.c
06 
07mkdir backup
08cd backup
09 
10touch MybashProgram.sh
11touch mycprogram.c
12touch MyCProgram.c
13touch Program.c
14 
15# chmod +x create_sample_files.sh
16 
17# ./create_sample_files.sh
18 
19# ls -R
20.:
21backup                  MybashProgram.sh  MyCProgram.c
22create_sample_files.sh  mycprogram.c      Program.c
23 
24./backup:
25MybashProgram.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. 使用mindepth和maxdepth限定搜索指定目录的深度

在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验证和。

{}将会被当前文件名取代。

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

5. 相反匹配

显示所有的名字不是MyCProgram.c的文件或者目录。由于maxdepth是1,所以只会显示当前目录下的文件和目录。

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

6. 使用inode编号查找文件

任何一个文件都有一个独一无二的inode编号,借此我们可以区分文件。创建两个名字相似的文件,

例如一个有空格结尾,一个没有。

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

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

1ls -i1 test*
216187429 test-file-name
316187430 test-file-name

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

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


你可以在你想对那些像上面一样的糟糕命名的文件做某些操作时使用这一技术。例如,名为file?.txt的文件名

字中有一个特殊字符。若你想执行“rm file?.txt”,下面所示的所有三个文件都会被删除。所以,采用下面的

步骤来删除"file?.txt"文件。

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

找到每一个文件的inode编号。

1ls -i1
2804178 file1.txt
3804179 file2.txt
4804180 file?.txt

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

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

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

下面的操作时合理的:

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

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

1ls -l
2total 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

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

的其他权限。

1find . -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

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

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

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

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



酷毙
1

雷人

鲜花
1

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部