Como copiar arquivos e diretórios sem copiar o conteúdo do diretório?

0

Eu tenho um comando find que seleciona alguns diretórios e arquivos a serem copiados para um local diferente (com --parents ). O que eu gostaria é que os diretórios que são gerados pelo comando find sejam copiados sem conteúdo (mas eles devem ter a mesma propriedade e modo).

Eu poderia limitar find aos arquivos apenas com -type f ou ! -type d , mas os diretórios seriam criados conforme necessário com a propriedade e o modo padrão. Se eu usar a opção -r para cp , os diretórios serão copiados com a propriedade e o modo corretos, mas também com todos os seus arquivos. Basicamente, gostaria que os diretórios da listagem resultassem na cópia apenas dos metadados do diretório sem o seu conteúdo.

Como conseguir isso?

    
por DepressedDaniel 27.11.2016 / 01:26

2 respostas

2

A ferramenta mais simples de usar é pax , já que tem uma opção -d que diz para não reciclar quando receber um diretório.

Então, para copiar apenas diretórios, fazendo isso em etapas, para que você possa validar que os diretórios são copiados, não copie os arquivos da mesma forma que você pode fazer

find somewhere -type d | pax -wd  > archive.tar
tar vtf archive.tar
( cd somewhere_else && tar xpf - ) < archive.tar

Quando estiver satisfeito, você pode remover a impressão intermediária do conteúdo do arquivo (tar vxf archive.tar) e substituir o arquivo intermediário archive.tar por um pipe.

    
por 27.11.2016 / 02:37
1

Se você tem o GNU find , talvez algo como

find path/to/dir -type d -printf '%P
rsync -avn -f'+ */' -f'- *' path/to/dir/ path/to/newdir/
' | rsync -0av --files-from=- path/to/dir/ path/to/newdir/

fará o que quiser (teste substituindo -0av por -0avn ).

Dependendo do seu critério de pesquisa, você pode usar rsync sozinho com filtros adequados, por exemplo, copiar uma estrutura de diretório inteira

find path/to/dir -type d -printf '%P
rsync -avn -f'+ */' -f'- *' path/to/dir/ path/to/newdir/
' | rsync -0av --files-from=- path/to/dir/ path/to/newdir/

Veja, por exemplo, Linux: rsync Copiar Diretórios Estruturas Somente na Árvore

    
por 27.11.2016 / 03:42

Tags