Lembre-se de que isso copiará também pastas contendo apenas pastas, e não apenas pastas contendo pelo menos um arquivo. Não tenho certeza se é exatamente isso que você está procurando; em qualquer caso eu vou deixar isso no caso de ser útil para outra pessoa.
Usando find
:
find source -mindepth 2 -maxdepth 2 -type d -not -empty -exec mv {} target \;
-
source
: pesquisas emsource/
-
-mindepth 2
: pesquisas iniciando no segundo nível da hierarquia de diretórios especificada -
-maxdepth 2
: pesquisas parando no segundo nível da hierarquia de diretórios especificada -
-type d
: pesquisa apenas por diretórios -
-not
: nega a seguinte condição / ação -
-empty
: pesquisa apenas por pastas vazias -
-exec [...]
: para cada resultado, executa o seguinte comando -
mv {} target \;
: move cada resultado paratarget/
user@debian ~/tmp % tree
.
├── source
│ ├── folder A
│ │ └── folder A
│ │ ├── file1
│ │ ├── file2
│ │ └── file3
│ └── folder B
│ └── folder B
└── target
6 directories, 3 files
user@debian ~/tmp % find source -mindepth 2 -maxdepth 2 -type d -not -empty -exec mv {} target \;
user@debian ~/tmp % tree
.
├── source
│ ├── folder A
│ └── folder B
│ └── folder B
└── target
└── folder A
├── file1
├── file2
└── file3
6 directories, 3 files