`

15个实用的Linux find命令示例

 
阅读更多

原文出处: thegeekstuff   译文出处: 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命令示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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作为查找名在当前目录及其子目录中查找文件的方法。

1
2
3
# find -name "MyCProgram.c"
./backup/MyCProgram.c
./MyCProgram.c

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

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

1
2
3
4
5
# find -iname "MyCProgram.c"
./mycprogram.c
./backup/mycprogram.c
./backup/MyCProgram.c
./MyCProgram.c

 

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

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

1
2
3
4
5
# 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)

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

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

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

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

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

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

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

1
2
3
4
5
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,所以只会显示当前目录下的文件和目录。

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

6. 使用inode编号查找文件

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

1
2
3
4
5
6
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编号,借此可以区分这两个文件。

1
2
3
ls -i1 test*
16187429 test-file-name
16187430 test-file-name

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

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

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

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

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

1
2
3
4
ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt

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

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

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

下面的操作时合理的:

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

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

1
2
3
4
5
6
7
8
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

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

1
2
3
4
5
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

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

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

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

1
2
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之后创建修改的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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选项可以通过文件大小查找文件。

查找比指定文件大的文件

1
find ~ -size +100M

查找比指定文件小的文件

1
find ~ -size -100M

查找符合给定大小的文件

1
find ~ -size 100M

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

14. 给常用find操作取别名

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

常用的删除a.out文件。

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

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

1
2
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的文件。

1
2
3
4
5
6
7
8
9
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命令示例

分享到:
评论

相关推荐

    Linux命令解释与示例

    总结,Linux命令是Linux系统操作的核心,通过不断实践和学习,你可以成为一个高效的Linux用户。记住,每一个命令都是你通向更深层次Linux世界的一把钥匙。不断探索,你会发现更多有趣和实用的功能。

    Linux find 命令使用小技巧一则

    本文将深入探讨如何利用`find`命令的一个实用技巧,即根据时间戳删除指定天数之前的目录,这对于定期清理日志、备份或其他临时文件的场景非常有用。 首先,我们来看`find`命令的基本语法: ``` find [path] ...

    Linux文件查找命令find

    ### Linux 文件查找命令 find 在Linux系统中,`find`命令是极其强大的工具,用于在文件系统中搜索和定位特定的文件或目录。通过灵活的选项设置,`find`能够根据文件名、权限、所有者、修改时间等多种条件进行精确...

    Linux常用命令详解.pdf

    ### Linux常用命令详解知识点 #### 一、命令格式与通配符 - **命令格式**: - **命令**:指定要执行的操作。 - **选项**:改变命令的行为方式,通常以`-`开头,多个选项可以用空格或直接连接的方式给出。 - **...

    Linux 命令速查手册

    本书不仅全面覆盖了Linux系统的核心命令,而且还提供了每个命令的具体使用方法和示例,让读者能够快速掌握和应用。在基础知识部分,作者可能会从Linux系统的安装和启动讲起,然后逐步深入到用户权限管理、文件系统...

    linux操作系统find命令详细解释

    ### Linux操作系统find命令详细解释 #### 一、概述 `find` 命令是Linux系统中非常重要的工具之一,用于在文件系统中查找文件。本文将详细介绍`find`命令的基本用法及其各种参数,帮助读者更好地掌握这一实用工具。...

    Linux常用命令全集,很方便和实用

    在IT领域,Linux操作系统是许多专业技术人员不可或缺的工具,尤其对于服务器管理和开发环境而言。...通过阅读"Linux常用命令全集"这个文档,你可以获得更详细的介绍和示例,加深对每个命令的理解和应用。

    Linux常用命令大全及示例-超全.pdf

    《Linux常用命令大全及示例》文档是一份非常全面且实用的学习资料,它不仅适合Linux初学者作为入门指南,同时也对有一定经验的用户起到很好的参考作用。本文将详细介绍该文档中的核心知识点,并通过具体示例加深理解...

    Linux经典常用的60个命令示例GEGEI.doc.rar

    这只是“Linux经典常用的60个命令示例GEGEI.doc”文档中的一部分内容,完整的文档会涵盖更多实用命令,包括进程管理、网络配置、用户及权限管理等方面。通过学习和实践这些命令,用户可以更加自如地在Linux环境中...

    suse linux 常用命令

    ### SUSE Linux常用命令知识...以上就是SUSE Linux常用命令的知识点详解,涵盖了文件管理、文本处理等多个方面,对于Linux初学者来说是非常宝贵的资源。通过学习和实践这些命令,可以大大提高在Linux环境下的工作效率。

    Linux常用操作命令

    - 示例:输入`vi`后按[Tab]键,如果只有一个以`vi`开头的命令,则自动补全为完整命令。 - **[Ctrl]-c**:终止当前运行中的命令。 - 示例:当命令执行过程中需要中断时,按下[Ctrl]-c即可终止。 - **[Ctrl]-d**:...

    Linux 常用命令笔记.txt

    ### Linux常用命令详解 #### 一、`touch` 命令 - **用途**:创建新文件或更新现有文件的时间戳。 - **路径**:`/bin/touch` - **用户权限**:所有用户 - **命令格式**:`touch [选项] 文件名` - **示例**: - `...

    linux非常实用的基本命令参数总结

    ### Linux基本命令参数详解 #### 1. `ls` 命令 - **`ls -a /root`**: 此命令用于列出 `/root` 目录下的所有文件,包括那些隐藏文件。在 Linux 中,文件名以`.`开头的被视为隐藏文件。 - **示例**: 如果你想查看 `/...

    linux常用命令50个 学习操作系统必备

    本文将详细介绍一系列基本且实用的Linux命令,帮助用户更好地理解和操作Linux系统。 #### 1. `cd` **功能描述**: `cd` 命令用于切换当前工作目录。 - **语法**: `cd [目标目录]` - **示例**: - `cd /home`: 切换...

    很实用的Linux常用命令

    ### 很实用的Linux常用命令 #### 一、登录与用户管理 - **登录提示**:在登录Linux系统时,通常会看到以下提示: - `#`:表示超级用户(root)的命令提示符。 - `$`:表示普通用户的命令提示符。 - **创建用户**:...

    linux基础命令

    以上四个命令只是Linux基础命令的冰山一角,实际上,Linux命令行提供了众多强大的工具,如`grep`用于在文件中搜索特定文本,`find`用于查找文件,`sed`进行文本流编辑,以及`awk`进行复杂的文本处理等。熟练掌握这些...

    Linux命令大全离线版&在线版

    用户可以通过内置的索引或搜索功能来定位所需的信息,对于那些不熟悉Linux或者需要在没有网络环境下的开发者来说,这是一个非常实用的工具。 在线版的“linuxcmd在线版.chm”则提供了网页形式的命令指南,可能包含...

    Linux基础命令教程实用豪华版

    在IT领域,Linux操作系统是许多专业开发者和系统管理员的首选平台,因其...这个“Linux基础命令教程实用豪华版”CHM文件将提供深入的解释和示例,帮助你更好地理解和应用这些命令,为后续的Linux学习打下坚实的基础。

Global site tag (gtag.js) - Google Analytics