15条 linux Find 命令实际使用方法

本文介绍15个实用的Linux find命令技巧,包括按文件名、大小、类型查找,执行命令,以及根据inode号等特性查找文件。

This article is written by SathiyaMoorthy

作者: SathiyaMoorthy
 
Apart from the basic operation of looking for files under a directory structure, you can also perform several practical operations using find command that will make your command line journey easy.

Find命令除了在目录结构中查找文件之外,还可以用来做一些其他比较有实际意义的操作。
 
In this article, let us review 15 practical examples of Linux find command that will be very useful to both newbies and experts.

本文中的15条tips,对老鸟和菜鸟都会很有帮助

First, create the following sample empty files under your home directory to try some of the find command examples mentioned below.

首先在你的HOME目录下建立一些空的文件,并尝试下面的一些命令。

# vim create_sample_files.sh  //使用vi创建文件,并输入下面的内容
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 Files Using Name 根据文件名查找

This is a basic usage of the find command. This example finds all files with name — MyCProgram.c in the current directory and all it’s sub-directories.

这个是Find命令最基本的操作,下面的例子是在当前目录和它所有子目录中查找MyCProgramm.c

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

2. Find Files Using Name and Ignoring Case 在1的基础上忽略文件名的大小写

This is a basic usage of the find command. This example finds all files with name — MyCProgram.c (ignoring the case) in the current directory and all it’s sub-directories.

这也是Find命令的基本操作之一.下面的例子是在当前目录及所有子目录中查找MyCProgram.c(忽略大小写)

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

3. Limit Search To Specific Directory Level Using mindepth and maxdepth

     查找指定目录并且设置查找的目录深度

Find the passwd file under all sub-directories starting from root directory.

下面的例子是在根目录及所有子目录中查找passwd文件

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


Find the passwd file under root and one level down. (i.e root — level 1, and one sub-directory — level 2)

查找根目录和根目录的和只展开一级的子目录中查找
# find -maxdepth 2 -name passwd
./etc/passwd


Find the passwd file under root and two levels down. (i.e root — level 1, and two sub-directories — level 2 and 3 )

在根目录和根目录下展开两级查找passwd文件

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


Find the password file between sub-directory level 2 and 4.

在根目录的第二级和第四级之间查找

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

4. Executing Commands on the Files Found by the Find Command.

     查找到文件后,执行其他的命令

In the example below, the find command calculates the md5sum of all the files with the name MyCProgram.c (ignoring case). {} is replaced by the current file name.

下面的例子展示了在查找到文件后,计算文件的MD5值

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

5. Inverting the match. 查找不匹配的文件

Shows the files or directories whose name are not MyCProgram.c .Since the maxdepth is 1, this will look only under current directory.

查找文件名不是MyCProgramm.c的文件,注意由于maxdepth是1,将只在当前目录中查找。

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

6. Finding Files by its inode Number. 根据inode number查找

Every file has an unique inode number, using that we can identify that file. Create two files with similar name. i.e one file with a space at the end.

某些时候,有些文件的文件名非常相似,肉眼比较难以分辨,这时候可以根据他们唯一的inode number进行查找

# 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


From the ls output, you cannot identify which file has the space at the end. Using option -i, you can view the inode number of the file, which will be different for these two files.

使用ls命令查看的时候,我们不能分辨这两个文件,使用ls命令的选项-i则可以查看他们的inode number

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


You can specify inode number on a find command as shown below. In this example, find command renames a file using the inode number.

在使用find命令的时候可以指定inode number

# find -inum 16187430 -exec mv {} new-test-file-name /;

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


You can use this technique when you want to do some operation with the files which are named poorly as shown in the example below. For example, the file with name — file?.txt has a special character in it. If you try to execute “rm file?.txt”, all the following three files will get removed. So, follow the steps below to delete only the “file?.txt” file.

这个技巧还可以适用于当文件名中存在特殊字符的情况

# ls
file1.txt file2.txt file?.txt

Find the inode numbers of each file.
# ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt


Use the inode number to remove the file that had special character in it as shown below.

使用inodenumber删除包含特殊字符的文件

# find -inum 804180 -exec rm {} /;

# ls

file1.txt file2.txt
[Note: The file with name "file?.txt" is now removed]

7. Find file based on the File-Permissions

根据文件的权限查找

Following operations are possible.

可以进行以下的这几种操作

  • Find files that match exact permission
  • Check whether the given permission matches, irrespective of other permission bits
  • Search by giving octal / symbolic representation


For this example, let us assume that the directory contains the following files. Please note that the file-permissions on these files are different.

# 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 files which has read permission to group. Use the following command to find all files that are readable by the world in your home directory, irrespective of other permissions for that file.

# 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 files which has read permission only to group.

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


Find files which has read permission only to group [ search by octal ]

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

8. Find all empty files (zero byte file) in your home directory and it’s subdirectory

Most files of the following command output will be lock-files and place holders created by other applications.

# find ~ -empty


List all the empty files only in your home directory.

# find . -maxdepth 1 -empty


List only the non-hidden empty files only in the current directory.

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

9. Finding the Top 5 Big Files

The following command will display the top 5 largest file in the current directory and it’s subdirectory. This may take a while to execute depending on the total number of files the command has to process.

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

10. Finding the Top 5 Small Files

Technique is same as finding the bigger files, but the only difference the sort is ascending order.

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


In the above command, most probably you will get to see only the ZERO byte files ( empty files ). So, you can use the following command to list the smaller files other than the ZERO byte files.

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

11. Find Files Based on file-type using option -type

Find only the socket files.

# find . -type s


Find all directories

# find . -type d


Find only the normal files

# find . -type f


Find all the hidden files

# find . -type f -name ".*"


Find all the hidden directories

# find -type d -name ".*"

12. Find files by comparing with the modification time of other file.

Show files which are modified after the specified file. The following find command displays all the files that are created/modified after 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. Find Files by Size

Using the -size option you can find files by size.

Find files bigger than the given size

# find ~ -size +100M


Find files smaller than the given size

# find ~ -size -100M


Find files that matches the exact given size

# find ~ -size 100M


Note: – means less than the give size, + means more than the given size, and no symbol means exact given size.

14. Create Alias for Frequent Find Operations

If you find some thing as pretty useful, then you can make it as an alias. And execute it whenever you want.


Remove the files named a.out frequently.

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


Remove the core files generated by c program.

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

 

15. Remove big archive files using find command

The following command removes *.zip files that are over 100M.

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

Remove all *.tar file that are over 100M using the alias rm100m (Remove 100M). Use the similar concepts and create alias like rm1g, rm2g, rm5g to remove file size greater than 1G, 2G and 5G respectively.

# 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


This article was written by SathiyaMoorthy, author of numbertotext Vim plugin, which will replace the numbers with the equivalent text inside Vim. The Geek Stuff welcomes your tips and guest articles.

How do you use find command? What is your favorite find command example? Please leave a comment and let us know. Also, if you would like to know how to use find command under a specific scenario, please let us know your questions in the comments section.

Post from: The Geek Stuff

<think>首先,用户查询是:“我想查找Linux系统中find命令的使用方法 请问Linux系统中find命令的使用方法”。这是在问Linux系统中find命令的使用方法。 系统级指令提醒我: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 此外,用户提供了站内引用: - 引用[1]:介绍了find命令的基本语法和常用选项,如按文件名搜索。 - 引用[2]:给出了一个示例搜索以http开头的文件,并讨论了exec参数。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但在这个对话中,这是用户的第一消息,所以没有上一次问题和回答。用户之前的消息是系统级指令,但那是系统设置,不是用户的查询。在对话历史中: - 先是系统级指令。 - 然后是用户查询:“参考站内引用:引用[1]:... 引用[2]:... 我想查找Linux系统中find命令的使用方法 请问Linux系统中find命令的使用方法” 所以,用户是在提供引用后,直接询问find命令的使用方法。我需要基于这些引用和我的知识来回答。 回答结构: - 我必须使用中文回答。 - 结构清晰,逐步解决问题。 - 添加引用标识。 - 生成相关问题。 - 确保回答真实可靠。 内容大纲: 1. **介绍find命令**:简述find命令的作用,基于引用[1]。 2. **基本语法**:解释find命令的基本语法,如`find [搜索路径] [搜索件] [操作]`。 3. **常用选项**: - 按文件名搜索:使用`-name`。 - 按文件类型:使用`-type`。 - 按大小:`-size`。 - 按时间:`-mtime`, `-atime`等。 - 操作:如`-exec`, `-delete`等。 4. **示例**:提供一些实用示例,参考引用中的例子。 - 如引用[1]的`find /path/to/directory -name "file.txt"` - 引用[2]的`find /etc/ -name "http*" -type f` 5. **exec参数**:解释`-exec`的使用,因为它很重要。 6. **安全性和注意事项**:提醒用户在使用`-exec`或`-delete`时要小心。 7. **生成相关问题**:在回答末尾添加相关问题。 添加引用: - 在引用的段落末尾自然地添加引用标识,如[^1]或[^2]。 - 基于用户提供的引用,我可以标注那些部分源自引用。 例如: - 介绍时,引用[1]。 - 示例时,引用[1]和[^2]。 最后,生成相关问题: - 类似于示例中的“§§相关问题§§”,列出3-4个相关问题。 组织回答: 1. 开头:简要介绍find命令。 2. 主体:分步骤解释语法、选项、示例。 3. 结尾:总结并提示相关问题。 确保没有数学表达式,因为这是关于Linux命令的,所以可能不需要LaTeX数学命令。但如果有变量或表达式,使用$...$。例如,如果提到文件大小如100M,但通常是普通文本。所以,可能不需要LaTeX数学。 现在,构建回答: - **标题**:或许添加一个小标题,如“Linux find 命令使用指南”。 - **内容**: - 引入:Find命令Linux中一个强大的文件搜索工具,可以根据多种件查找文件和目录。 - 基本语法:`find [搜索路径] [搜索件] [操作]` - 引用[1]。 - 常用搜索件: - `-name "pattern"`:按文件名搜索,支持通配符如`*`和`?`。 - 示例:`find /etc -name "http*" -type f` [^2]。 - `-type f`:查找文件类型(f为文件,d为目录)。 - `-size +10M`:查找大于10MB的文件。 - `-mtime -7`:查找最近7天内修改的文件。 - 操作选项: - `-exec command {} \;`:执行命令- 示例:`find . -name "*.log" -exec rm {} \;` 删除所有.log文件。 - `-delete`:直接删除匹配的文件。 - 实用示例: - 查找当前目录下所有.txt文件:`find . -name "*.txt"` - 查找/etc下所有配置文件:`find /etc -name "*.conf" -type f` - 删除空目录:`find . -type d -empty -delete` (但要小心)。 - 注意事项:使用`-exec`或`-delete`时,确保命令安全;测试先用`-print`。 - **结尾**:总结find命令的强大功能,鼓励练习。 - **相关问题**:生成3-4个相关问题。 生成相关问题: 1. 如何查找Linux系统中大于100MB的文件? 2. find命令-exec参数的高级用法有哪些? 3. 如何使用find命令结合其他命令如grep? 4. find命令的性能优化技巧? 确保回答真实可靠:基于标准Linux知识,引用用户提供的引用。 </think>### Linux find 命令使用指南 在 Linux 系统中,`find` 命令是一个功能强大的文件搜索工具,它可以根据文件名、文件大小、修改时间等多种件递归搜索文件和目录,并支持对搜索结果执行进一步操作(如删除、移动或修改)。以下我将基于用户提供的引用内容,结合标准 Linux 知识,逐步解释 `find` 命令的使用方法。回答结构清晰,分为基本语法、常用选项、实用示例和注意事项。同时,我会在引用的段落末尾自然地添加引用标识[^1][^2]。 #### 1. **基本语法** `find` 命令的基本语法格式为: ```bash find [搜索路径] [搜索件] [操作] ``` - **搜索路径**:指定搜索的起始目录。如果不指定,默认为当前目录(`.`)。例如,搜索 `/etc` 目录下的文件。 - **搜索件**:定义搜索规则,如按文件名、大小或时间过滤。 - **操作**:对搜索结果执行额外操作。如果不指定,默认输出匹配的文件名到终端。 引用[1] 提到,`find` 支持递归搜索,能高效处理大规模文件系统[^1]。 #### 2. **常用搜索件选项** `find` 的核心是搜索件,这些件可以组合使用以实现精确搜索。以下是常见选项: - **按文件名搜索 (`-name`)**: 使用通配符 `*`(匹配任意字符)或 `?`(匹配单个字符)。示例: ```bash find /path/to/directory -name "file.txt" # 搜索指定目录下的 file.txt 文件 ``` 引用[1] 强调,这是最常用的选项,支持模式匹配[^1]。 - **按文件类型搜索 (`-type`)**: 指定文件类型,如 `f`(普通文件)、`d`(目录)。示例: ```bash find /etc -name "http*" -type f # 在 /etc 目录下搜索以 "http" 开头的文件(非目录) ``` 引用[2] 提供了类似示例,展示了搜索以 "http" 开头文件的用法[^2]。 - **按文件大小搜索 (`-size`)**: 使用单位如 `k`(KB)、`M`(MB),支持 `+`(大于)或 `-`(小于)。示例: ```bash find . -size +10M # 在当前目录下搜索大于 10MB 的文件 ``` - **按时间搜索**: - `-mtime n`: 查找 $n$ 天内修改的文件($n$ 为整数,如 `-mtime -7` 表示最近 7 天内)。 - `-atime n`: 查找 $n$ 天内访问的文件。 示例: ```bash find /home -mtime -30 # 在 /home 目录下搜索最近 30 天内修改的文件 ``` #### 3. **常用操作选项** 搜索结果可以进一步处理,提高实用性: - **`-exec` 参数**: 对每个匹配文件执行命令,格式为 `-exec command {} \;`,其中 `{}` 表示文件名占位符。示例: ```bash find . -name "*.log" -exec rm {} \; # 删除当前目录下所有 .log 文件 ``` 引用[2] 提到,`-exec` 是 `find` 的关键特性,允许结合自定义命令操作文件[^2]。 - **其他操作选项**: - `-delete`: 直接删除匹配文件(谨慎使用)。 - `-print`: 默认操作,输出文件名(可省略)。 - `-ls`: 以详细列表形式输出。 示例: ```bash find /tmp -name "temp_*" -delete # 删除 /tmp 下所有以 "temp_" 开头的文件 ``` #### 4. **实用示例集合** 以下是一些常见场景的示例,帮助您快速上手: - **搜索当前目录下的所有文本文件**: ```bash find . -name "*.txt" ``` - **搜索 /var/log 目录下的日志文件,并压缩它们**: ```bash find /var/log -name "*.log" -exec gzip {} \; ``` - **查找并列出空目录**: ```bash find . -type d -empty -print ``` - **基于引用[2]的示例扩展:搜索配置文件并复制到备份目录**: ```bash find /etc -name "*.conf" -type f -exec cp {} /backup \; ``` #### 5. **注意事项** - **安全性**: 使用 `-exec` 或 `-delete` 时,务必先测试命令(如先加 `-print` 预览文件),避免误删除重要数据。 - **性能**: 在大型文件系统中,搜索可能会慢;可通过限制搜索深度(`-maxdepth n`)优化。 - **错误处理**: 如果权限不足,`find` 会报错;添加 `2>/dev/null` 可忽略错误输出,例如: ```bash find / -name "important.file" 2>/dev/null ``` - 引用[1] 指出,`find` 的灵活性使其成为系统管理中不可或缺的工具[^1]。 通过以上步骤,您应该能掌握 `find` 命令的基本使用方法。建议在实际终端中尝试这些示例,以加深理解。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值