如何用单行Bash命令删除当前目录白名单模式外的所有文件
单行Bash实现方案
重要提醒:删除操作不可逆,正式执行前请务必先预览待删除列表,避免误删数据。
直接可用的命令如下:
find . -mindepth 1 -print0 | grep -z -E -v -f delete_whitelist.txt -e './delete_whitelist.txt' | xargs -0 rm -rf
逻辑说明
- 遍历当前目录下所有文件、子目录(排除根目录自身),用
\0作为分隔符处理特殊文件名,避免带空格、特殊字符的路径解析出错 - 读取delete_whitelist.txt中定义的扩展正则规则,筛选出所有不匹配白名单规则的路径,同时强制保留白名单文件本身,防止规则文件被提前删除导致逻辑异常
- 对筛选出的非白名单路径执行递归强制删除
预校验方法
正式删除前先执行以下命令预览待删除路径,确认结果符合预期后再执行删除命令:
find . -mindepth 1 -print0 | grep -z -E -v -f delete_whitelist.txt -e './delete_whitelist.txt' | xargs -0 echo
你给出的白名单正则示例完全兼容该命令的正则解析规则,无需额外修改即可直接使用。
内容的提问来源于stack exchange,提问作者ronen
相关产品推荐
相关产品推荐

