妈咪,我找到了!15个实用的Linux find命令示例
2013-11-10 18:25
399 查看
原文出处: thegeekstuff 译文出处: oschina-青崖白鹿
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易。
本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。
首先,在你的home目录下面创建下面的空文件,来测试下面的find命令示例。
这是find命令的一个基本用法。下面的例子展示了用MyCProgram.c作为查找名在当前目录及其子目录中查找文件的方法。
这是find命令的一个基本用法。下面的例子展示了用MyCProgram.c作为查找名在当前目录及其子目录中查找文件的方法,忽略了大小写。
在root目录及其子目录下查找passwd文件。
在root目录及其1层深的子目录中查找passwd. (例如root — level 1, and one sub-directory — level 2)
在root目录下及其最大两层深度的子目录中查找passwd文件. (例如 root — level 1, and two sub-directories — level 2 and 3 )
在第二层子目录和第四层子目录之间查找passwd文件。
下面的例子展示了find命令来计算所有不区分大小写的文件名为“MyCProgram.c”的文件的MD5验证和。{}将会被当前文件名取代。
显示所有的名字不是MyCProgram.c的文件或者目录。由于maxdepth是1,所以只会显示当前目录下的文件和目录。
任何一个文件都有一个独一无二的inode编号,借此我们可以区分文件。创建两个名字相似的文件,例如一个有空格结尾,一个没有。
从ls的输出不能区分哪个文件有空格结尾。使用选项-i,可以看到文件的inode编号,借此可以区分这两个文件。
你可以如下面所示在find命令中指定inode编号。在此,find命令用inode编号重命名了一个文件。
你可以在你想对那些像上面一样的糟糕命名的文件做某些操作时使用这一技术。例如,名为file?.txt的文件名字中有一个特殊字符。若你想执行“rm file?.txt”,下面所示的所有三个文件都会被删除。所以,采用下面的步骤来删除"file?.txt"文件。
找到每一个文件的inode编号。
如下所示: 使用inode编号来删除那些具有特殊符号的文件名。
下面的操作时合理的:
找到具有指定权限的文件
忽略其他权限位,检查是否和指定权限匹配
根据给定的八进制/符号表达的权限搜索
此例中,假设目录包含以下文件。注意这些文件的权限不同。
找到具有组读权限的文件。使用下面的命令来找到当前目录下对同组用户具有读权限的文件,忽略该文件的其他权限。
找到对组用户具有只读权限的文件。
找到对组用户具有只读权限的文件(使用八进制权限形式)。
下面命令的输出文件绝大多数都是锁定文件盒其他程序创建的place hoders
只列出你home目录里的空文件。
只列出当年目录下的非隐藏空文件。
下面的命令列出当前目录及子目录下的5个最大的文件。这会需要一点时间,取决于命令需要处理的文件数量。
方法同查找5个最大的文件类似,区别只是sort的顺序是降序。
上面的命令中,很可能你看到的只是空文件(0字节文件)。如此,你可以使用下面的命令列出最小的文件,而不是0字节文件。
只查找socket文件
查找所有的目录
查找所有的一般文件
查找所有的隐藏文件
查找所有的隐藏目录
显示在指定文件之后做出修改的文件。下面的find命令将显示所有的在ordinary_file之后创建修改的文件。
使用-size选项可以通过文件大小查找文件。
查找比指定文件大的文件
查找比指定文件小的文件
查找符合给定大小的文件
注意: – 指比给定尺寸小,+ 指比给定尺寸大。没有符号代表和给定尺寸完全一样大。
若你发现有些东西很有用,你可以给他取别名。并且在任何你希望的地方执行。
常用的删除a.out文件。
删除c程序产生的core文件。
下面的命令删除大于100M的*.zip文件。
用别名rm100m删除所有大雨100M的*.tar文件。使用同样的思想可以创建rm1g,rm2g,rm5g的一类别名来删除所有大于1G,2G,5G的文件。
Find命令示例(第二部分)
若你喜欢这篇关于find命令的Mommy文章,别忘了看看第二部分的关于find命令的Daddy文章。爹地,我找到了!, 15个极好的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用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. 使用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 |
1 | # find -maxdepth 2 -name passwd |
2 | ./etc/ passwd |
1 | # find / -maxdepth 3 -name passwd |
2 | ./usr/bin/ passwd |
3 | ./etc/pam.d/ passwd |
4 | ./etc/ 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的文件或者目录。由于maxdepth是1,所以只会显示当前目录下的文件和目录。1 | find -maxdepth "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 |
1 | ls -i1 test * |
2 | 16187429 test - file -name |
3 | 16187430 test - file -name |
1 | find -inum exec mv {} new- test - file -name \; |
2 |
3 | # ls -i1*test* |
4 | 16187430 new- test - file -name |
5 | 16187429 test - file -name |
1 | ls |
2 | file1.txt file2.txt file ?.txt |
1 | ls -i1 |
2 | 804178 file1.txt |
3 | 804179 file2.txt |
4 | 804180 file ?.txt |
1 | find -inum 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 hoders1 | find ~ -empty |
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 |
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 |
2 | # rmao |
1 | alias rmc= "find |
2 | # rmc |
15. 用find命令删除大型打包文件
下面的命令删除大于100M的*.zip文件。1 | find / - type f -name *.zip -size +100M - exec rm -i {} \;" |
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命令的Mommy文章,别忘了看看第二部分的关于find命令的Daddy文章。爹地,我找到了!, 15个极好的Linux find命令示例
相关文章推荐
- linux内核研究1
- linux中比较文件差异命令diff用法简介
- linux中创建特殊文件mknod命令用法详解
- MonoDevelop with Visual Studio to Linux and Mac OSX maintaining a single code base for all platforms.
- linux学习笔记
- linux下导入、导出mysql数据库命令
- linux-rbtree
- centos 6.x 安装chrome
- Linux下查询一个包是32位还是64位
- tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
- 获取linux系统信息(续)
- Ubuntu下Latex安装(包括中文环境)
- CentOS上搭建Android开发环境遇到此错误:failed to create the SD card
- gccxml pygccxml py++: centos 6.4 py++安装
- Emacs是一种信仰!世界最强编辑器介绍
- 深入理解Linux软件包的配置、编译与安装
- linux下svn命令大全
- linux命令详解:jobs命令
- linux命令详解:df命令
- linux命令详解:cat命令