首先,在您的主目录下创建以下示例空文件,以尝试下面提到的某些find命令示例。
# vim create_files.sh
touch MybashProgram.shtouch mycprogram.txttouch MyCProgram.txttouch Program.txtmkdir backupcd backuptouch MybashProgram.shtouch mycprogram.txttouch MyCProgram.txttouch Program.txt
# chmod +x !$chmod +x create_files.sh[root@aiker01 ~]# ./!$./create_files.sh
[root@aiker01 ~]# ls -Rt.:backup MybashProgram.shMyCProgram.txt create_files.sh Program.txt mycprogram.txt./backup:Program.txt mycprogram.txt MyCProgram.txt MybashProgram.sh
1.使用名称查找文件
这是find命令的基本用法。本示例查找当前目录中所有名称为MyCProgram.txt的文件及其所有子目录。
[root@aiker01 ~]# find ./ -name "MyCProgram.txt"./MyCProgram.txt./backup/MyCProgram.txt
2.使用名称查找文件并忽略大小写
这是find命令的基本用法。这个例子查找当前目录及其所有子目录中名为MyCProgram.txt(忽略大小写)的所有文件。
[root@aiker01 ~]# find -iname "MyCProgram.txt"./mycprogram.txt./MyCProgram.txt./backup/mycprogram.txt./backup/MyCProgram.txt
3.使用mindepth和maxdepth限制搜索到特定的目录级别和搜索的深度
找到从根目录开始的所有子目录下的passwd文件。
[root@aiker01 ~]# find / -name passwd/etc/passwd/etc/pam.d/passwd/usr/bin/passwd/usr/share/bash-completion/completions/passwd
在根目录下找到passwd文件,向下一级。(即根级别1和子目录级别2)
[root@aiker01 ~]# find / -maxdepth 2 -name passwd/etc/passwd
在根目录下找到passwd文件,并在两个级别下。(即根级1和两个子目录 - 级别2和3)
[root@aiker01 ~]# find / -maxdepth 3 -name passwd/etc/passwd/etc/pam.d/passwd/usr/bin/passwd
找到子目录级别2和4之间的密码文件。
[root@aiker01 ~]# find / -mindepth 3 -maxdepth 5 -name passwd
/etc/pam.d/passwd /usr/bin/passwd /usr/share/bash-completion/completions/passwd4.对查找命令找到的文件执行命令。
在下面的示例中,find命令计算名称为MyCProgram.txt的所有文件的md5sum(忽略大小写)。{}被当前的文件名取代。
[root@aiker01 ~]# find ./ -iname "MyCProgram.txt" -exec md5sum {} \;d41d8cd98f00b204e9800998ecf8427e ./mycprogram.txtd41d8cd98f00b204e9800998ecf8427e ./MyCProgram.txtd41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.txtd41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.txt
5.反匹配查找。
显示名称不是MyCProgram.txt的文件或目录。由于maxdepth为1,因此只会在当前目录下查看。
[root@aiker01 ~]# find -maxdepth 1 -not -iname "MyCProgram.txt"../.bash_logout./.bash_profile./.bashrc./.cshrc./.tcshrc./anaconda-ks.cfg./.bash_history./.ssh./create_files.sh./.viminfo./MybashProgram.sh./Program.txt./backup
6.通过inode编号查找文件。
每个文件都有一个唯一的inode号码,使用它我们可以识别该文件。创建两个具有相似名称的文件。即最后一个空格的文件。
[root@aiker01 ~]# touch "test.txt"
[root@aiker01 ~]# touch "test.txt " # [注:最后有空格][root@aiker01 ~]# ls -1 test*
test.txt test.txt从ls输出,你不能识别哪个文件最后有空格。使用选项-i,可以查看文件的inode编号,这两个文件的编号不同。
[root@aiker01 ~]# ls -i1 test* 638020 test.txt 638021 test.txt
您可以在find命令中指定inode编号,如下所示。在这个例子中,find命令使用inode编号重命名一个文件。
[root@aiker01 ~]# find -inum 638020 -exec mv {} new-test \;[root@aiker01 ~]# ls -i1 test* 638020 new-test 638021 test.txt
当你想用下面的例子所示的名字很接近的文件进行一些操作时,你可以使用这种技术。例如,名称为 - file?.txt的文件在其中具有特殊字符。如果您尝试执行"rm file?.txt",以下所有三个文件将被删除。因此,请按照以下步骤删除"file?.txt"文件。
[root@aiker01 ~]# touch file{1..5}.txt file\?.txt[root@aiker01 ~]# ls -tfile5.txt file4.txt file2.txt file1.txt file3.txt file?.txt
找到每个文件的索引节点号。
[root@aiker01 ~]# ls -i1 file*772345 file1.txt772347 file2.txt854690 file3.txt991744 file4.txt991745 file5.txt991746 file?.txt
使用inode编号删除其中包含特殊字符的文件,如下所示。
[root@aiker01 ~]# find -inum 991746 -exec rm {} \;[root@aiker01 ~]# ls -i1 file* # 名称为"file?.txt"的文件现在被删除 772345 file1.txt772347 file2.txt854690 file3.txt991744 file4.txt991745 file5.txt
7.根据文件权限查找文件
以下操作是可能的。
查找匹配确切权限的文件
检查给定的权限是否匹配,而不考虑其他权限位 通过给八进制/符号表示进行搜索对于这个例子,让我们假设该目录包含以下文件。请注意,这些文件的文件权限是不同的。
[root@aiker01 ~]# ll-rwxr-xr-x 1 root root 191 Dec 7 00:11 create_files.sh-rw------- 1 root root 0 Dec 7 00:51 file1.txt-rw------- 1 root root 0 Dec 7 00:51 file2.txt-rw------- 1 root root 0 Dec 7 00:51 file3.txt-rw----r-- 1 root root 0 Dec 7 00:51 file4.txt-rw----r-- 1 root root 0 Dec 7 00:51 file5.txt-rw-r--r--. 3 aiker aiker 0 Dec 2 16:11 1.txt
查找具有读取权限的文件。使用以下命令来查找属组可读的所有文件,而不考虑该文件的其他权限。
[root@aiker01 ~]# find . -perm -g=r -type f -name "file*" -exec ls -l {} \; -rw-r----- 1 root root 0 Dec 7 00:51 ./file1.txt -rw-r----- 1 root root 0 Dec 7 00:51 ./file2.txt -rw-r----- 1 root root 0 Dec 7 00:51 ./file3.txt查找属组仅具有读取权限的文件。
[root@aiker01 ~]# find . -perm g=r -type f -exec ls -l {} \;----r----- 1 root root 0 Dec 7 00:51 ./file4.txt----r----- 1 root root 0 Dec 7 00:51 ./file5.txt
查找属组仅具有读取权限的文件[按八进制搜索]
[root@aiker01 ~]# find . -perm 040 -type f -exec ls -l {} \;
----r----- 1 root root 0 Dec 7 00:51 ./file4.txt ----r----- 1 root root 0 Dec 7 00:51 ./file5.txt8.在当前目录及其子目录中查找所有空文件(零字节文件)
以下命令输出的大多数文件将是由其他应用程序创建的锁定文件和占位符。
[root@aiker01 ~]# find ~ -empty
只列出您的主目录中的所有空文件。
[root@aiker01 ~]# find . -maxdepth 1 -empty./MybashProgram.sh./mycprogram.txt./MyCProgram.txt./Program.txt
仅列出当前目录中的非隐藏空白文件。
[root@aiker01 ~]# find . -maxdepth 1 -empty -not -name ".*"./MybashProgram.sh./mycprogram.txt./MyCProgram.txt./Program.txt
9.找到前5个大文件
以下命令将显示当前目录及其子目录中前4个最大的文件。这可能需要一段时间才能执行,具体取决于命令必须处理的文件总数。
[root@aiker01 ~]# find . -type f -exec ls -s {} \; | sort -n -r | head -4 16 ./.bash_history8 ./.viminfo.bak8 ./a.txt4 ./.viminfo
10.找到前5个小文件
技术和查找更大的文件是一样的,但唯一的区别是升序。
[root@aiker01 ~]# find . -type f -exec ls -s {} \; | sort -n | head -5 0 ./111/222/2.bak 0 ./111/222/3.txt 0 ./111/222/4.txt 0 ./11.txt 0 ./1.txt在上面的命令中,很可能你只会看到零字节文件(空文件)。因此,您可以使用以下命令列出ZERO字节文件以外的较小文件。
[root@aiker01 ~]# find . -not -empty -type f -exec ls -s {} \; | sort -n | head -54 ./120301.txt4 ./anaconda-ks.cfg4 ./.bash_logout4 ./.bash_profile4 ./.bashrc
11.使用选项-type查找基于文件类型的文件
只找到套接字文件。
[root@aiker01 ~]# find . -type s
找到所有目录
[root@aiker01 ~]# find . -type d ../.ssh./1./test
只找到正常的文件
[root@aiker01 ~]# find . -type f
./.bash_logout
.```
/.bash_profile ./.bashrc找到所有隐藏的文件
[root@aiker01 ~]# find . -type f -name ".*"
./.bash_logout ./.bash_profile ./.bashrc ./.cshrc ./.tcshrc找到所有隐藏的目录 [root@aiker01 ~]# find -type d -name ".*"../.ssh
12.通过与其他文件的修改时间进行比较来查找文件。
显示指定文件后修改的文件。以下find命令显示在mycprogram.txt之后创建/修改的所有文件。
[root@aiker01 ~]# ll -rt-rw-r--r-- 1 root root 0 Dec 7 00:35 new-test-rw-r--r-- 1 root root 0 Dec 7 00:35 test.txt ----r----- 1 root root 0 Dec 7 00:51 file5.txt----r----- 1 root root 0 Dec 7 00:51 file4.txt-rw-r----- 1 root root 0 Dec 7 00:51 file3.txt-rw-r----- 1 root root 0 Dec 7 00:51 file2.txt-rw-r----- 1 root root 0 Dec 7 00:51 file1.txt
[root@aiker01 ~]# find -newer mycprogram.txt../MyCProgram.txt./Program.txt./backup./backup/MybashProgram.sh./backup/mycprogram.txt./backup/MyCProgram.txt./backup/Program.txt./test.txt ./new-test./file1.txt./file2.txt./file3.txt./file4.txt./file5.txt
13.按大小查找文件
使用-size选项可以按大小查找文件。
查找大于给定大小的文件
#查找〜大小+ 100M
[root@aiker01 ~]# find ~ -size +100M
查找小于给定大小的文件
[root@aiker01 ~]# find ~ -size -1k/root/1.txt
查找匹配确切给定大小的文件
[root@aiker01 ~]# find ~ -size 2k/root/anaconda-ks.cfg/root/.ssh/id_rsa/root/.viminfo
注意: - 表示小于给定大小,+表示大于给定大小,并且没有符号表示确切的给定大小
。
14.为频繁查找操作创建别名
如果你发现一些非常有用的东西,那么你可以把它作为一个别名。并随时执行。
经常删除名为a.out的文件。
[root@aiker01 ~]# alias rmao="find . -iname a.out -exec rm {} \;"[root@aiker01 ~]# rmao
删除c程序生成的核心文件。
[root@aiker01 ~]# alias rmc="find . -iname core -exec rm {} \;"[root@aiker01 ~]# rmrm rmail rmail.postfix rmao rmc rmdir rmmod[root@aiker01 ~]# rmc
15.使用find命令删除大档案文件
以下命令将删除超过100M的 .zip文件。 `[root@aiker01 ~]# find / -type f -name .zip -size +100M -exec rm -i {} \;`
删除使用别名rm100m(删除100M)超过100M的所有* .tar文件。使用类似的概念,并创建别名,如rm1g,rm2g,rm5g分别去除大于1G,2G和5G的文件大小。
[root@aiker01 ~]# find / -type f -name *.zip -size +100M -exec rm -i {} \;[root@aiker01 ~]# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"[root@aiker01 ~]# alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"[root@aiker01 ~]# alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"[root@aiker01 ~]# alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"[root@aiker01 ~]# rmrm rm1g rm5g rmail.postfix rmc rmmod rm100m rm2g rmail rmao rmdir