linux - 如何删除父文件夹下只有一个文件的子文件夹
问题描述
我有一个包含 8000 个子文件夹的文件夹,并且想删除那些只包含一个文件的子文件夹
解决方案
考虑到所有subfolders
文件都在同一个文件夹中,没有“子子”深度,find
命令用这个单行打印子文件夹并bash
处理其余部分:
示例文件夹和文件:
$ find .
.
./subfolder_1
./subfolder_1/file1
./subfolder_1/file2
./subfolder_1/file3
./subfolder_2
./subfolder_2/file4
./subfolder_3
./subfolder_3/file5
./subfolder_3/file6
./subfolder_4
./subfolder_5
./subfolder_5/file7
删除仅包含一个文件的子文件夹的衬线:
$ find . -not -empty -type d -print0 | while read -d '' -r dir; do files=("$dir"/*); if((${#files[@]} == "1")); then rm -r $dir exit; fi; done
删除后剩余的列表
$ find .
.
./subfolder_1
./subfolder_1/file1
./subfolder_1/file2
./subfolder_1/file3
./subfolder_3
./subfolder_3/file5
./subfolder_3/file6
./subfolder_4
额外的
包含文件数量的子文件夹列表:
$ find . -not -empty -type d -print0 | while read -d '' -r dir; do files=("$dir"/*); printf "${#files[@]} $dir\n"; done
6 .
3 ./subfolder_1
1 ./subfolder_2
2 ./subfolder_3
1 ./subfolder_5
仅包含一个文件的子文件夹列表:
$ find . -not -empty -type d -print0 | while read -d '' -r dir; do files=("$dir"/*); if((${#files[@]} == "1")); then printf "${#files[@]} $dir\n" exit; fi; done
1 ./subfolder_2
1 ./subfolder_5
推荐阅读
- php - 在 Codeigniter 中调用扩展辅助函数时未定义的函数
- rxjs5 - distinctUntilChanged 在带有 switchMap 的嵌套管道中
- python - 如何在pytest-qt中单击按钮后检查正确打开窗口
- python - Python savemat 只保存最后一个图像特征
- java - 搜索 2 个列表以比较值的最佳方法是什么?
- regex - 正则表达式仅选择两个字符串之间的特定字符
- swift - 从一组数据(coreData 图像)创建 Zip 文件并通过电子邮件通过 .zip 文件共享
- php - Docker compose volume 在多阶段构建中覆盖 COPY
- node.js - 如何解决此内容安全策略错误?
- javascript - 将自定义 createMaterialTopTabNavigator 添加到组件?