
Eu tenho uma grande árvore de diretórios com muitos arquivos.
Gostaria de recriar a estrutura de diretórios em um novo local, mas apenas os diretórios, não os arquivos.
Verifiquei cp
a página de manual do , mas não vejo um argumento que ajude.
Responder1
rsync -av -f"+ */" -f"- *" /.../SOURCE /.../DESTINATION
Responder2
find . -type d -exec mkdir -p ~/to/{} \;
Retirado da resposta de @whitequark a esta pergunta:Copie a estrutura de diretórios sem copiar arquivos, no Mac OS X
Responder3
Outra abordagem é usar o tree
que é bastante útil e navegar nas árvores de diretórios com base em suas opções fortes. Existem opções apenas para diretório, excluir diretórios vazios, excluir nomes com padrão, incluir apenas nomes com padrão, etc.man tree
Vantagem: você pode editar ou revisar a lista, ou se você executa muitos scripts e cria um lote de diretórios vazios com frequência
Abordagem: crie uma lista de diretórios usando tree
, use essa lista como entrada de argumentos paramkdir
tree -dfi --noreport > some_dir_file.txt
-dfi
lista apenas diretórios, imprime o caminho completo para cada nome, faz com que a árvore não imprima as linhas de recuo,
--noreport
Omite a impressão do relatório de arquivos e diretórios no final da listagem em árvore, apenas para fazer com que o arquivo de saída não contenha nenhum detalhe
Em seguida, vá até o destino onde deseja os diretórios vazios e execute
xargs mkdir < some_dir_file.txt
Responder4
Descobri que isso atingiu uma necessidade semelhante. Com uma versão suficientemente nova do rsync, essa é sua melhor aposta.
Se você não possui uma versão recente do rsync, isso resolve:
find path/to/source -type -d -exec mkdir path/to/dest/'{}' \; -exec chown --reference='{}' path/to/dest/'{}' \; -exec chmod --reference='{}' path/to/dest/'{}' \;
(Uma variante disso pode ser usada para espelhamento de permissão)