find是Unix/Linux命令行工具箱中最棒的工具之一。
一、find命令的工作方式
find命令的工作方式:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。
二、实战演练
要列出当前目录及子目录下所有的文件和文件夹,可以采用下面的写法:
$ find base_path
bash_path可以放在任意位置(例如 /home/slynux),find会从该位置开始往下查找。
例如:
$ find . -print
##打印文件和目录的列表
. 指定当前目录,
. . 指定父目录。
这是Unix文件系统的约定用法。
-print指明打印出匹配文件的文件名(路径)。当使用-print时,’\n’作为用于对输出的文件名进行分隔。就算你忽略-print,find命令仍会打印出文件名。
-print0指明使用’\0’作为匹配的文件名之间的定界符。当文件名中包含换行符时,这个方法就有用武之地了。
三、补充内容
1、根据文件名或正则表达式进行搜索
$ find /home/slynux -name “*.txt” -print
选项-name的参数指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。
[通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。]
*.txt能够匹配所有所有以 *.txt 结尾的文件名。
选项 -print在终端中打印出符合条件的文件名或文件路径,这些匹配条件通过find命令的选项给出。
ps:
1)find有个选项 -iname 和-name作用一样,但是可以忽略大小写。
$find . -iname “example*” -print
./example.txt
./EXAMPLE.TXT
2)如果想匹配多个条件中的一个,可以采用or条件
$ find . ( -name “.txt" -o -name ".pdf” ) -print
./text.pdf
./new.txt
上面的代码会打印出所有的 .txt 和 .pdf 文件,是因为这个find命令能够匹配所有这两类文件。
( ) 用于将中间的内容视为一个整体。
2、否定参数
$ fine . ! -name “*.txt” -print
上面的find命令能够匹配所有不以 .txt结尾的文件名。
3、基于目录深度的搜索
-maxdepth
-mindepth
使用以下命令将find文件向下的最大深度限制为1:
$ find . -maxdepth 1 -name “f*” -print
打印出深度距离当前目录至少两个子目录的所有文件:
$ find . -min depth 2 -name “f*” -print
4、根据文件类型搜索
5、根据文件时间进行搜索
6、基于文件大小的搜索
7、删除匹配的文件
8、基于文件权限和所有权的匹配
9、利用find执行命令或动作
10、让find跳过特定的目录