前一段总结了linux/unix下的find命令,Linux/Mac find 命令详解 – 码中人。事实上,查找功能是操作系统最基础、最常用的功能。
linux下命令行式的查找功能特别方便,而windows下相对麻烦一些(当然,也有可能是我对windows下的命令行不太熟悉)。好在win10可以安装linux子系统(WSL,Windows subsystem For Linux),所以现在windows也可以做linux上一样的操作。
查找并删除重复文件,是我们经常需要的操作。find命令支持在查找到文件后进行处理,find命令语法如下:
find [dir-name 目标路径] [criteria 条件选项] [action 处理动作]
其中,
- dir-name :–定义工作目录,例如进入/ tmp /
- criteria :用于选择“ * .sh”等文件
- action :查找操作(对文件执行的操作),例如删除文件。
您想通过一个命令删除多个文件,例如'* .jpg’或'* .sh',请尝试:
find . -name "FILE-TO-FIND" -exec rm -rf {} \;
或 find /dir/to/search/ -type f -name "FILE-TO-FIND-Regex" -exec rm -f {} \;
两种语法之间的唯一区别是,第一个命令也删除目录,而第二个命令仅删除文件。其中,选项如下:
- -name “FILE-TO-FIND” :文件模式。
- -exec rm -rf {} \; :删除所有与文件模式匹配的文件。
- -type f :仅匹配文件,不包含目录名。
- -type d :仅匹配目录,不包含文件名。
新版本的find命令也有-delete选项。建议不使用使用-exec rm -rf {} \;,而是使用-delete删除所有匹配的文件。我们还可以将-depth选项显式传递给find,以便在目录本身之前处理每个目录的内容。也可以使用该-maxdepth选项来控制在起始点以下的大多数目录级别的降序。例如,-maxdepth 0手段仅将测试和操作应用于起点本身。类似地,我们可以将传递-mindepth给查找。这意味着请勿以低于级别(非负整数)的级别进行任何测试或操作。例如,-mindepth 1表示处理除起点之外的所有文件。因此,这是一个简化的语法:
find /dir/to/search/ -type f -name "FILES-TO-FIND" -delete
find /dir/to/search/ -type f -name "FILES-TO-FIND" -depth -delete
find /dir/to/search/ -maxdepth 2 -type f -name "FILES-TO-FIND" -depth -delete
示例
在当前目录中 找到所有扩展名为.bak(* .bak)的文件并删除它们:
find . -type f -name "*.bak" -exec rm -f {} \;
或
find . -type f -name "*.bak" -delete
参考资料
Find and Remove Files With One Linux Command On Fly - nixCraft