![删除除一个子目录之外的所有子目录](https://linux22.com/image/484442/%E5%88%A0%E9%99%A4%E9%99%A4%E4%B8%80%E4%B8%AA%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%90%E7%9B%AE%E5%BD%95.png)
假设当前目录下有多个子目录,其中一个叫做A。
如何使用 Bash 删除除 A 之外的所有子目录?
答案1
Bash 已扩展通配符(首先测试,然后删除回显):
shopt -s extglob
echo rm -rf !(A)
答案2
find -maxdepth 1 -type d -not -name A -not -name "." -exec rm -ir {} \;
答案3
关于什么:
mv A /tmp/
rm * -rf
mv /tmp/A .
这避免了其他命令中拼写错误所带来的“可怕”后果。
请注意运行上面的 rm * -rf 命令时不要位于根 (/) 文件夹中。
答案4
我通常通过首先运行一个 ls 命令来做到这一点。我不是使用 unix 机器,但是类似这样:
ls -lda“[^A]”
一旦正确完成,将其通过管道传输到命令
ls -lda“[^A]”| xargs rm -rf
如果我的正则表达式有误,请随意编辑上面...