linux 如何删除子目录但不删除文件

a 文件夹下子文件夹跟文件
  b
  c
  1.txt
  2.txt

只删除a文件夹下的子文件夹跟子文件夹里面的文件,a 跟文件不能删除

阅读 2.6k
3 个回答

可以用脚本

#! /usr/bin/bash
for fs in $(ls $1);do
    if [ -d $1/$fs ];then
        cd $1 && rm -rf $fs;
    fi;
done;

然后执行 xxx.sh /path/to/dir

新手上路,请多包涵

如果只是简单粗暴的删除,可以参考“张京”的回答

rm -rf a/*/

如果需要更细化的筛选,比如正则匹配文件名,或只删除某段时间的文件,可以在下面两个命令里增量加选项,具体参考 man find

找出子目录并递归删除
find ./ -type d -exec rm -rf {} \;
找出当前层级的结尾带"/"(也就是目录)的文件并递归删除
find ./ -mindepth 1 -exec rm -rf {}/ \;

这两个都是一行命令,不过都会返回非0返回码,因为搜索结果包含子目录和子目录内文件,删除子目录后,执行到子目录内文件时会找不到,所以返回1,不过不影响整体运行。

如果对程序执行状态有要求,可以参考“ssseerr999”的回答写脚本,对于其他需求也更灵活

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题