Eu tenho uma pasta SOURCE que contém várias pastas de subnível, cada uma com seus próprios arquivos.
Quero copiar esta pasta em uma nova pasta COPY, na qual preciso copiar a estrutura de diretórios, mas manter os arquivos como links simbólicos para os arquivos originais em SOURCE e suas subpastas.
Respostas:
Aqui está a solução no Linux não incorporado e Cygwin:
Observe que SOURCE deve ser um caminho absoluto e ter uma barra final. Se você deseja fornecer um caminho relativo, pode usar
fonte
SOURCE
é um caminho relativo, então eu acho que sim. Experimente e se isso não funcionar, sugiro que você faça uma nova pergunta. Faça referência a este por todos os meios.Existem pelo menos 2 utilitários padrão para construir uma árvore de diretórios sombra de uma árvore existente, portanto, não há necessidade de escrever código aqui.
Primeiro há
lndir(1)
a partir doxutils-dev
pacote. Ele usa links simbólicos para arquivos. Na página do manual:Uma alternativa talvez melhor é simplesmente usar
cp
as opções certas, como sugere a resposta aceita. Vou apenas dar mais alguns detalhes úteis:Se você não se preocupa em preservar todos os atributos (propriedades / permissões, horários), substitua a
a
opção (equivalente a-dr --preserve=all
) porr
(apenas recursiva):fonte
lndir
também está disponível como um script shell aqui, caso ele não esteja instalado: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtVocê pode tentar alguns comandos find como este:
fonte
Algo assim fará o que você precisa.
Diretórios são criados na árvore COPY de destino. Todo o resto é vinculado novamente ao caminho absoluto na árvore SOURCE. Verifique se SOURCE e COPY estão especificados como caminhos absolutos (começando com
/
).Se você tem uma árvore grande para copiar e deseja um relatório de progresso por diretório, pode adicionar um
echo "$ITEM" >&2;
pouco antes domkdir
comando.(Eu olhei
cp
e,cpio
mas nenhum deles parece ter uma opção para vincular à fonte com links simbólicos.)fonte
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
script ... mas parece que isso também é necessáriobash
. FixaçãoSe não houver diretórios vazios em SOURCE que precisem ser copiados
fonte
cp
qualquer maneira, por que nãocp -as
?Eu começaria quebrando o perl:
File::Find
é um módulo útil que permite executar uma sub-rotina específica em qualquer arquivo dentro de uma árvore de diretórios. Nesse caso, o sub verifica se é um diretório - e se for, faz ummkdir
ou um arquivo - nesse caso, faz um link simbólico.fonte
Parece que você está procurando algo parecido com a ferramenta
rsnapshot
; ele cria cópias de diretórios arbitrários e usa hardlinks sempre que possível. (Dê uma olhada na página de manual para ver se isso se encaixa.)fonte