Quero criar um clone da estrutura de nosso servidor de arquivos de vários terabytes. Eu sei que cp --parents pode mover um arquivo e sua estrutura pai, mas existe alguma maneira de copiar a estrutura de diretório intacta?
Eu quero copiar para um sistema Linux e nosso servidor de arquivos é CIFS montado lá.
Respostas:
Você poderia fazer algo como:
para criar a lista de diretórios, então
para criar os diretórios no destino.
fonte
find . -type d -print0 >dirs.txt
exargs -0 mkdir -p <dirs.txt
. Isso fará com que ambos os comandos usem nulos como separadores em vez de espaços em branco.xargs
pode exceder o comprimento máximo do comando do sistema quando você começar a lidar com pedidos de centenas ou milhares, portanto, use isso com cuidado. (Encontre o limite de comprimento do comando comgetconf ARG_MAX
.) Com vários diretórios, pode ser necessário escrever um script para percorrer a saída.fonte
rsync
solução da resposta de Chen Levy nesta pergunta do SO--
é um terminador de opção de utilitário GNU padrão. Significa "ei mkdir, qualquer argumento depois disso não é um sinalizador, então trate-o como um argumento de arquivo, mesmo que comece com um caractere '-'."Aqui está uma solução simples usando rsync:
Eu encontrei essa solução lá
fonte
rsync -a --include '*/' --exclude '*' "$source" "$target"
Não sei se você está procurando uma solução no Linux. Se sim, você pode tentar isto:
fonte
Isso copia os diretórios e atributos de arquivos, mas não os dados dos arquivos:
Em seguida, você pode excluir os atributos dos arquivos se não estiver interessado neles:
fonte
A seguinte solução funcionou bem para mim em vários ambientes:
fonte
Isso funciona:
Basta substituir SOURCE_DIR e DEST_DIR.
fonte
Isso resolve até mesmo o problema dos espaços em branco:
No diretório original / fonte:
em seguida, recrie-o no diretório recém-criado:
fonte
Substitua
target_dir
esource_dir
com os valores apropriados:Testado em OSX + Ubuntu.
fonte
Um script python de Sergiy Kolodyazhnyy postado em Copiar somente pastas, não arquivos? :
ou da casca:
PARA SUA INFORMAÇÃO:
fonte
Outra abordagem é usar o,
tree
que é muito útil e navegar em árvores de diretório 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. Check outman tree
Vantagem : você pode editar ou revisar a lista, ou se você fizer muitos scripts e criar um lote de diretórios vazios com frequência
Abordagem : crie uma lista de diretórios usando
tree
, use essa lista como uma entrada de argumentos paramkdir
-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 arquivo e diretório no final da lista da árvore, apenas para fazer com que o arquivo de saída não contenha nenhum erro.Em seguida, vá para o destino onde deseja os diretórios vazios e execute
fonte
Copiar dir apenas com permissão e propriedade associadas
fonte
Solução de 1 linha:
fonte
Se você pode obter acesso de uma máquina Windows, você pode usar xcopy com / T e / E para copiar apenas a estrutura de pastas (o / E inclui pastas vazias)
http://ss64.com/nt/xcopy.html
[EDITAR!]
Este usa rsync para recriar a estrutura do diretório, mas sem os arquivos. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Pode até ser melhor :)
fonte
Aqui está uma solução em php que:
Crie um arquivo como
syncDirs.php
com este conteúdo:Execute-o como um usuário com direitos suficientes:
sudo php syncDirs.php /var/source /var/destination
fonte