首页 技术 正文
技术 2022年11月6日
0 收藏 486 点赞 782 浏览 5925 个字

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

英文原文:Mommy, I found it! — 15 Practical Linux Find Command Examples

标签: Linux659人收藏此文章, 我要收藏66号公路 推荐于 3年前 (共 8 段, 翻译完成于 09-26) (44评参与翻译(1人):

青崖白鹿仅中文 | 中英文对照 | 仅英文 | 打印此文章

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

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

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

?

12345678910111213141516171819202122232425 # vim create_sample_files.shtouch MybashProgram.shtouch mycprogram.ctouch MyCProgram.ctouch Program.c mkdir backupcd backup touch MybashProgram.shtouch mycprogram.ctouch MyCProgram.ctouch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R.:backup                  MybashProgram.sh  MyCProgram.ccreate_sample_files.sh  mycprogram.c      Program.c ./backup:MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c

!

1. 用文件名查找文件

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

?

123 # find -name "MyCProgram.c"./backup/MyCProgram.c./MyCProgram.c

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

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

?

12345 # find -iname "MyCProgram.c"./mycprogram.c./backup/mycprogram.c./backup/MyCProgram.c./MyCProgram.c

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

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

?

12345 # find / -name passwd./usr/share/doc/nss_ldap-253/pam.d/passwd./usr/bin/passwd./etc/pam.d/passwd./etc/passwd

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

?

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

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

?

1234 # find / -maxdepth 3 -name passwd./usr/bin/passwd./etc/pam.d/passwd./etc/passwd

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

?

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

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

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

?

12345 find -iname "MyCProgram.c" -exec md5sum {} \;d41d8cd98f00b204e9800998ecf8427e  ./mycprogram.cd41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.cd41d8cd98f00b204e9800998ecf8427e  ./backup/MyCProgram.cd41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c

5. 相反匹配

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

?

123456 find -maxdepth 1 -not -iname "MyCProgram.c"../MybashProgram.sh./create_sample_files.sh./backup./Program.c

6. 使用inode编号查找文件

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

?

12345678 touch "test-file-name" # touch "test-file-name "[Note: There is a space at the end] # ls -1 test*test-file-nametest-file-name

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

?

123 ls -i1 test*16187429 test-file-name16187430 test-file-name

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

?

12345 find -inum 16187430 -exec mv {} new-test-file-name \; # ls -i1 *test*16187430 new-test-file-name16187429 test-file-name

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

?

12 lsfile1.txt  file2.txt  file?.txt

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

?

1234 ls -i1804178 file1.txt804179 file2.txt804180 file?.txt

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

?

12345 find -inum 804180 -exec rm {} \; # lsfile1.txt  file2.txt[Note: The file with name "file?.txt" is now removed]

!

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

下面的操作时合理的:

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

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

?

12345678 ls -ltotal 0-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read---------- 1 root root 0 2009-02-19 20:31 no_for_all-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read

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

?

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

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

?

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

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

?

12 find . -perm 040 -type f -exec ls -l {} \;----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之后创建修改的文件。

?

1234567891011121314 ls -lrttotal 0-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file../everybody_read./all_for_all./no_for_all

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

使用-size选项可以通过文件大小查找文件。

查找比指定文件大的文件

?

1 find ~ -size +100M

查找比指定文件小的文件

?

1 find ~ -size -100M

查找符合给定大小的文件

?

1 find ~ -size 100M

注意: – 指比给定尺寸小,+ 指比给定尺寸大。没有符号代表和给定尺寸完全一样大。

14. 给常用find操作取别名

若你发现有些东西很有用,你可以给他取别名。并且在任何你希望的地方执行。

常用的删除a.out文件。

?

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

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

?

12 alias rmc="find . -iname core -exec rm {} \;"# 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的文件。

?

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

Find命令示例(第二部分)

若你喜欢这篇关于find命令的Mommy文章,别忘了看看第二部分的关于find命令的Daddy文章。爹地,我找到了!, 15个极好的Linux find命令示例

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905