递归删除多个目录下名为“log”的文件

Recursively delete files named `log` under multiple directories

我的文件夹结构如下:

feat1
feat2
feat3

现在每个文件夹中都有另一个名为 builds 的文件夹。 在 builds 下,我们有编号的文件夹,例如 12 等。 在每个编号的文件夹下,我们都有模式 *.log 的文件,然后是名称为 log.

的特定文件

我需要 运行 linux 服务器/unix 服务器中的命令递归地只删除名称为 log 而不是 *.log 的所有这些文件文件夹 feat1feat2feat3。怎么做?

这是一个使用 for 循环的快速但肮脏的解决方案,应该可以完成工作。

for f in `find feat* -name 'log'`; do rm "$f"; done;

for f in 是说我们要用 f 作为每个结果的变量做一个 for 循环。

find feat* -name 'log' 搜索任何以 "feat" 开头并使用 * 作为通配符的目录。

-name 表示我们正在寻找 log.

的文件名

do rm "$f" 删除找到的每个结果。

有时在以这种方式执行破坏性命令之前使用 echo 会很有帮助。见下文。

for f in `find feat* -name 'log'`; do echo "$f"; done;

您 运行 的命令取决于您对搜索条件的谨慎程度以及是否需要递归搜索。

  • 删除 feat*/builds/*/ 下名为 log 的任何内容:

    rm feat*/builds/*/log
    
  • 递归查找并删除当前目录下任意位置名为 log 的任何内容:

    find . -name log -delete
    
  • 递归查找并删除名为 log 的任何内容,仅在 feat*:

    find feat* -name log -delete
    
  • 递归查找并删除名为 log 的任何内容,仅在 feat*/builds/*/:

    find feat*/builds/*/ -name log -delete
    
  • 递归查找并删除任何名为 log 文件,仅在 feat*/builds/*/:

    find feat*/builds/*/ -name log -type f -delete