Bash如何删除包含指定文件且无额外文件的子目录
命令说明
核心逻辑是遍历parent下的一级子目录,校验目录内所有文件/文件夹名称是否仅包含file1、file2、file3三者,符合条件的目录即为待删除目标。
试运行(预览待删除目录)命令
执行后只会打印符合删除条件的目录路径,不会实际删除数据,建议先执行本命令核对结果无误后再执行删除命令:
find parent -mindepth 1 -maxdepth 1 -type d -exec sh -c ' for dir do # 提取目录内所有项的文件名 items=("$dir"/*) items=("${items[@]##*/}") del_flag=true for item in "${items[@]}"; do # 只要存在不在允许列表内的项就标记为不删除 [[ $item =~ ^(file1|file2|file3)$ ]] || { del_flag=false; break; } done $del_flag && echo "待删除目录:$dir" done ' sh {} +
实际执行删除命令
核对预览结果无误后执行以下命令完成删除:
find parent -mindepth 1 -maxdepth 1 -type d -exec sh -c ' for dir do items=("$dir"/*) items=("${items[@]##*/}") del_flag=true for item in "${items[@]}"; do [[ $item =~ ^(file1|file2|file3)$ ]] || { del_flag=false; break; } done $del_flag && rm -rf "$dir" done ' sh {} +
内容的提问来源于stack exchange,提问作者Janosh
相关产品推荐
相关产品推荐

