我需要删除给定文件夹中的所有子目录及其内容,同时保留特定的子目录。有没有办法使用 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。其余皆待宰杀。