首页 > 系统相关 >15个实用的Linux find命令示例

15个实用的Linux find命令示例

时间:2023-07-24 20:01:48浏览次数:44  
标签:文件 15 name 示例 file Linux 20 root find

译文出处: oschina-青崖白鹿。欢迎加入技术翻译小组。

<!-- div id="ad1"> <script type="text/javascript"> google_ad_client = "ca-pub-7056282119617872"; google_ad_slot = "6645040531"; google_ad_width = 300; google_ad_height = 250; </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> <br/ -->


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


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


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



# vim create_sample_files.sh
touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c
mkdir backup
cd backup
touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c
# chmod +x create_sample_files.sh
# ./create_sample_files.sh
# ls -R
.:
backup                  MybashProgram.sh  MyCProgram.c
create_sample_files.sh  mycprogram.c      Program.c. /backup :
MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c


1. 用文件名查找文件

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



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

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

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



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


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

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



# 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)



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

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




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

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



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

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

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



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

5. 相反匹配

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



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

6. 使用inode编号查找文件

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



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

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



ls -i1 test *
16187429 test - file -name
16187430 test - file -name

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



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

me

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



ls
file1.txt  file2.txt  file ?.txt

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



ls -i1
804178 file1.txt
804179 file2.txt
804180 file ?.txt

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



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

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

下面的操作时合理的:


找到具有指定权限的文件

忽略其他权限位,检查是否和指定权限匹配

根据给定的八进制/符号表达的权限搜索

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


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

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



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

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



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

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



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



find ~ -empty

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



find . -maxdepth 1 -empty

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



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

9. 查找5个最大的文件

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



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

10. 查找5个最小的文件

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



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

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



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

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

只查找socket文件



find . - type s

查找所有的目录



find . - type d

查找所有的一般文件



find . - type f

查找所有的隐藏文件


find . - type f -name ".*"

查找所有的隐藏目录



find - type d -name ".*"

12. 通过和其他文件比较修改时间查找文件

显示在指定文件之后做出修改的文件。下面的find命令将显示所有的在ordinary_file之后创建修改的文件。



ls -lrt
total 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选项可以通过文件大小查找文件。


查找比指定文件大的文件



find ~ -size +100M

查找比指定文件小的文件



find ~ -size -100M

查找符合给定大小的文件



find ~ -size 100M

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


14. 给常用find操作取别名

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


常用的删除a.out文件。


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

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



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

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

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



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

用别名rm100m删除所有大雨100M的*.tar文件。使用同样的思想可以创建rm1g,rm2g,rm5g的一类别名来删除所有大于1G,2G,5G的文件。



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命令示例》


标签:文件,15,name,示例,file,Linux,20,root,find
From: https://blog.51cto.com/u_16203469/6838504

相关文章

  • Linux 网络收包流程
    哈喽大家好,我是咸鱼我们在跟别人网上聊天的时候,有没有想过你发送的信息是怎么传到对方的电脑上的又或者我们在上网冲浪的时候,有没有想过HTML页面是怎么显示在我们的电脑屏幕上的无论是我们跟别人聊天还是上网冲浪,其实都依靠于计算机网络这项技术计算机网络是指将多台计算机......
  • Linux系列---【Aerospike的介绍】
    Aerospike的介绍工作模式默认:混合闪存,支持HDD(机械硬盘)和SSD(固态硬盘),推荐SSD,性能好。......
  • Linux | export 命令
    Linuxexport命令是一个Bash命令,用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量,如PATH、PYTHONPATH等。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。语法export[-fnp][变量名称]=[变量设置值]......
  • Linux系列---【如何确定自己服务器的磁盘是机械硬盘还是固态硬盘?】
    如何确定自己服务器的磁盘是机械磁盘还是固态硬盘?使用lsblk命令#这将列出所有磁盘设备的名称和rota(旋转)属性lsblk-d-oname,rota查看输出结果的第二列,rota属性的值:如果值为0,则表示该磁盘是固态硬盘(SSD)。如果值为1,则表示该磁盘是机械硬盘(HDD)。......
  • linux中的磁盘管理
    一、机械硬盘结构1.机械硬盘(HDD)我们先来看看最常见的机械硬盘。 机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据就存放在磁盘盘片中。大家见过老式的留声机吗?留声机上使用的唱片和我们的磁盘盘片非常相似,只不过留声机只有一个磁头,而硬盘是上下双磁头,盘片在两个磁......
  • (数据科学学习手札153)基于martin的高性能矢量切片地图服务构建
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,在日常研发地图类应用的场景中,为了在地图上快速加载大量的矢量要素,且方便快捷的在前端处理矢量的样式,且矢量数据可以携带对应的若干属性字段,目前主流的做法......
  • Linux系统特殊权限详解
    一、Linux系统特殊权限概述在Linux系统中,普通权限我们了解到有r(读)、w(写)、x(执行),这三种权限,但是在我们查看一些其它的文件时,会发现还会有其它权限的字母。例如:s,t等比如下面查看的这三个文件的权限,在不同用户权限上面有不同的字母。 二、suid1、在介绍这个权限之前需要了解一些......
  • Linux CentOS 7 卸载 PostgreSQL
    1、查看服务状态并停止服务systemctlstatuspostgresqlsystemctlstoppostgresql2、使用YUM命令卸载PostgreSQLyumremovepostgresql*3、验证RPM包是否卸载干净rpm-qa|greppostgresql4、删除PostgreSQL数据文件和配置文件目录(非必要)rm-rf/var/lib/p......
  • Linux安装mysql 02
    1:新建目录: 2:下载Mysql数据库文件:wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar:3:安装数据库文件解压文件tar-xvfmysql-5.7.39-1.el7.x86_64.rpm-bundle.tar yum-yinstallmysql-comm*.rpm 按照......
  • 15款提高表格操作的jQuery插件
       table表格由于它的浏览器兼容性和复杂的标签嵌套方式,可以算是添加样式最困难的对象之一了。大多数前端er都把网页中的table标签替换为div,主要就是因为div要比table更容易添加CSS样式。但是我们在日常应用中仍然要用到table表格,其中最好的例子就是对照表。今天彬Go将向大家......