Linux / shell - 从一个目录中删除所有(子)子文件夹

时间:2015-06-17 15:55:22

标签: linux find directory rm

我继承了下面的结构,这是多年意大利面条代码的结果......

gallery
├── 1
│   ├── deleteme1
│   ├── deleteme2
│   ├── deleteme3
│   └── full
│       ├── file1
│       ├── file2
│       └── file3
├── 2
│   ├── deleteme1
│   ├── deleteme2
│   ├── deleteme3
│   └── full
│       ├── file1
│       ├── file2
│       └── file3
└── 3
    ├── deleteme1
    ├── deleteme2
    ├── deleteme3
    └── full
        ├── file1
        ├── file2
        └── file3

实际上,这个文件夹是数千个子文件夹。我只需要保留./gallery/{number}/full/*(即full文件夹以及gallery内每个编号目录中的所有文件),其他所有内容都不再需要,需要删除。

是否可以构建一个单行来处理这个问题?我已经尝试过find / maxdepth / prune无法找到满足我需求的arragement。

(更新:澄清一下,所有文件夹都包含文件 - none都是空的)

3 个答案:

答案 0 :(得分:2)

使用PaddyD答案,您可以先清除不需要的目录,然后将其删除:

float

答案 1 :(得分:2)

这可以通过bash extglobs轻松完成,它允许匹配与模式不匹配的所有文件:

shopt -s extglob
rm -ri ./gallery/*/!(full)

答案 2 :(得分:0)

怎么样:

find . -type d -empty -delete