使用rm命令删除文件夹内除指定文件夹外内容失败求助
可行解决方案
方法1:使用find命令(兼容性强,推荐)
这是最稳妥的方式,能精准匹配要删除的目录,避免误操作。执行前建议先去掉删除部分,确认匹配的目录是否正确:
# 先查看要删除的目录列表(确认无误再执行删除) find . -maxdepth 1 -type d ! -name "." ! -name "2" ! -name "3" # 确认后执行删除 find . -maxdepth 1 -type d ! -name "." ! -name "2" ! -name "3" -exec rm -rf {} +
参数说明:
-maxdepth 1:只处理当前目录下的子目录,不递归深入子目录内部-type d:仅匹配目录! -name "X":排除名为X的目录-exec rm -rf {} +:批量将匹配到的目录传给rm -rf删除,比逐个删除高效
方法2:Bash扩展glob模式
如果用的是Bash shell,先开启扩展glob功能,再用匹配语法删除:
# 开启扩展glob(仅当前会话有效) shopt -s extglob # 先查看匹配项(确认) echo !(2|3) # 仅删除目录(加斜杠只匹配目录) rm -rf !(2|3)/
如果担心误删文件,也可以用循环判断后删除:
shopt -s extglob for item in !(2|3); do if [ -d "$item" ]; then rm -rf "$item" fi done
方法3:ls+grep+xargs组合(应急用,不推荐含特殊字符的目录)
如果目录名没有空格、特殊字符,可以用这个快速写法:
# 先查看要删除的目录 ls -d */ | grep -vE '(2|3)/' # 确认后删除 ls -d */ | grep -vE '(2|3)/' | xargs rm -rf
重要提醒
所有删除命令执行前,一定要先运行不带rm -rf的测试命令,确认匹配的是你要删除的目录,避免误删重要数据。
内容的提问来源于stack exchange,提问作者SAURABH PANDEY
相关产品推荐
相关产品推荐

