You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

删除当前目录下所有文件夹(含内容)但保留文件及解决find命令参数错误

删除当前目录下所有文件夹(含内容)但保留文件及解决find命令参数错误

嘿,我来帮你搞定这个问题!你想要删除当前目录下的所有直接子文件夹(包括里面的所有内容),但保留当前目录里的文件对吧?咱们先把正确的命令搞定,再说说你刚才遇到的报错原因。

正确实现需求的方法

这里有两种靠谱的方式:

方法1:完善后的find命令

你之前的find命令差了关键的收尾标记,正确的写法是:

find . -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

或者用更高效的版本(一次性把所有目录传给rm,减少进程创建次数):

find . -mindepth 1 -maxdepth 1 -type d -exec rm -r {} +

我给你拆解下每个参数的作用:

  • .:明确指定当前目录作为查找起点(其实省略也能工作,但加上更清晰)
  • -mindepth 1:跳过当前目录本身,避免误操作
  • -maxdepth 1:只查找当前目录下的直接子文件夹,不会深入到子文件夹的子文件夹里
  • -type d:只匹配目录类型的项
  • -exec rm -r {} \;:对每个找到的目录执行rm -r删除操作,{}代表找到的目录路径,\;-exec的必须结束标记(这就是你报错的核心原因)

方法2:更简洁的bash glob命令

如果你的shell是bash(大部分Linux系统默认都是),可以用更简单的命令:

rm -r */

*/是bash的通配符,会匹配当前目录下所有以/结尾的项——也就是所有直接子文件夹。不过要注意:如果当前目录没有任何子文件夹,这个命令会抛出rm: cannot remove '*/': No such file or directory的错误,但这不影响正常使用,有文件夹的时候会正常删除。

你遇到的报错原因

你之前输入的命令find -mindepth 1 -maxdepth 1 -type d -exec rm -r {}会触发find: missing argument to -exec'错误,是因为-exec选项需要明确的结束标记:要么用;表示对每个找到的项单独执行命令,要么用+表示把所有找到的项一次性传给命令。你没加这个标记,find就不知道什么时候结束-exec`的参数列表,所以报错了。

备注:内容来源于stack exchange,提问作者Anon

火山引擎 最新活动