Copiar árvore de diretórios sem diretórios vazios?

17

Eu tenho a seguinte árvore

# upper letters = directory
# lower letters = files
A
|-- B
|-- C
    |-- D
    |-- e <= file
|-- F
    |-- G

Preciso copiar essa árvore para outro destino, ignorando recursivamente todos os diretórios vazios. Então o destino acaba parecendo:

C
|-- e

Como você faria isso com unix, rsync, etc?

Dane O'Connor
fonte

Respostas:

29

Claro que minutos depois descubro um método fácil. rsynctem uma --prune-empty-dirsopção

Dane O'Connor
fonte
1

Existem várias soluções para esse problema (extraídas desta página da web ):

Esta opção usa o comando mkdir com o comando find. Este método também requer que você esteja dentro da pasta de origem enquanto executa o comando.

bash$ cd /path/to/source && find . -type d -exec mkdir -p /path/to/dest/{} ;

Usando find e cpio

bash$ find /path/to/source -type d | cpio -pd /path/to/dest/

Usando Rsync

bash$ rsync -a --include '*/' --exclude '*' /path/to/source /path/to/dest

OU

bash$ rysnc -a -f"+ */" -f"- *" /path/to/source /path/to/dest

VL-80
fonte