删除子目录留下给定的目录

删除子目录留下给定的目录

我需要删除给定文件夹中的所有子目录及其内容,同时保留特定的子目录。有没有办法使用 bash 或 shell 脚本来做到这一点?文件结构如下所示。

container_dir
├── delete_this_dir
│   ├── file1.txt
│   └── file2.txt
├── delete_this_dir
│   ├── l1.txt
│   └── l2.txt
└── keep_this_dir
    ├── file1.txt
    ├── file2.txt
    └── file3.txt

答案1

在 bash 中,使用外部全局变量排除要保留的目录:

shopt -s extglob
rm -rf container_dir/!(keep_this_dir)

答案2

备份此container_dir并尝试以下操作:

find $container_dir/* -path $keep_this_dir -prune -o -name "*" -type d -exec rm -rfv {} \;

但我建议使用更简单的备份解决方案

答案3

如果您仅通过名称来确定要保留的目录,那么您可以执行以下操作:

cd container_dir && \
find . -maxdepth 1 -type d ! -name . ! -name keep_this_dir -exec rm -r {} +

意思是,切换到容器目录,然后find从那里启动 a,但仅直到深度级别为 1,并且仅在该级别的目录中搜索。从获取的目录池中find,只保留两个目录,即container_dir 和keep_this_dir。其余皆待宰杀。

相关内容