删除除符合特定模式的子目录之外的所有子目录

删除除符合特定模式的子目录之外的所有子目录

我想删除给定目录中除符合特定模式的目录之外的所有子目录和文件:

example_dir/model-*/gen-*/share/**

常规设置:我生成了多个模型(> 100),每个模型都有 >=1 代。这些模型(例如example_dir/model-0/gen-0/)内有多个目录和子目录。

期望结果:我想删除除匹配项之外的所有目录和文件:

example_dir/model-*/gen-*/share/

在每个单独的模型/代中,它都会是这样的吗?:

rm -rf !(share)

答案1

我不确定我是否完全理解了你的问题,也不确定后续问题是否有意义。我想知道的是,如果你有一个目录树,比如

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

删除example_dir/model-0/gen-0/trash (及其内容) 就够了吗,还是你还想删除 example_dir/model-0/grandfatherexample_dir/platypusfoo?那 呢example_dir/model-0/gen-0/file123.txt

如果你想删除trash(及其内容)和file123.txt,请尝试

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

如果您想删除trash(及其内容)但保留file123.txt,请尝试

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

/(在 后添加一个!(share))。

无论哪种方式,请仔细查看输出,如果您确定这是您想要的,请再次运行不带 的命令 echo

如果您还想删除除之外的顶级目录example_dir、与模式不匹配的一级目录model-*或与模式不匹配的二级目录gen-*,请编辑您的问题以澄清。

相关内容