Copie subpastas específicas no linux

0

Eu tenho sturecture de arquivo semelhante:

/home/dave/documents/static/
/home/static/
/home/dave/pictures/static/
/home/dave/otherfolders/
...

Eu quero copiar deste diretório somente as pastas denominadas static . Essas pastas também podem ser subpastas. E deve formar a mesma estrutura na nova pasta que tinha antes. Ou seja,

cp -r /home/* /otherhome/

Eu tentei isso:

find home/ -name 'static' -exec cp -r '{}/*' 'otherhome/{}' ';'

Mas recebo erros que /home/dave/documents/static/* e outras pastas estáticas não existem. Eu acho que não posso concatenar os nomes dos arquivos com /* . Alguma ideia de como fazer isso?

    
por davekr 18.11.2013 / 18:35

1 resposta

2

O problema é que esses diretórios não existem quando você tenta copiá-los. Você teria que fazê-los primeiro.

find home -type d -name 'static' -print0 | while IFS= read -rd '' dir; do 
    newdir="${dir#home/}"
    mkdir -p otherhome/"$newdir"   
    cp -R "$dir" otherhome/"${newdir%static}"
done

Precisamos remover o home/ dos nomes de diretório originais e criar a nova hierarquia de pastas ( mkdir -p ). Então, copiamos o conteúdo recursivamente, mas também precisamos remover static do final do novo diretório para não criar static/static .

Pode haver uma maneira mais bonita de conseguir isso.

Exemplo antes e depois:

.
├── home
│   ├── dave
│   │   ├── documents
│   │   │   └── static
│   │   │       └── Untitled.txt
│   │   ├── otherfolders
│   │   └── pictures
│   │       └── static
│   │           └── Untitled2.txt
│   └── static
└── otherhome
    ├── dave
    │   ├── documents
    │   │   └── static
    │   │       └── Untitled.txt
    │   └── pictures
    │       └── static
    │           └── Untitled2.txt
    └── static
    
por 18.11.2013 / 19:05

Tags