linux/unix 查找并删除特定文件

[广告:最高 ¥2000 红包]阿里云服务器、主机等产品通用,可叠加官网常规优惠使用 | 限时领取


前一段总结了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 处理动作]

其中,

  1. dir-name :–定义工作目录,例如进入/ tmp /
  2. criteria :用于选择“ * .sh”等文件
  3. 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 {} \;
两种语法之间的唯一区别是,第一个命令也删除目录,而第二个命令仅删除文件。其中,选项如下:

  1. -name "FILE-TO-FIND" :文件模式。
  2. -exec rm -rf {} \; :删除所有与文件模式匹配的文件。
  3. -type f :仅匹配文件,不包含目录名。
  4. -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

码中人 微信公众号

关注微信公众号

码中人 微信公众号