Estrutura de diretórios de links rígidos em outro lugar

2

Eu tenho um diretório onde os arquivos aparecem. Eu quero executar um script regular que encontre todos os arquivos nesse diretório que tenham apenas um link para eles, e vincule-os em outro diretório. No entanto, quero que a estrutura de diretório no segundo diretório seja criada para corresponder à primeira.

find /srcdir/ -links 1 -exec ln {} /dstdir/ \;

Faz o hardlink de todos os arquivos, mas não cria os diretórios que eu preciso.

Se um diretório contiver apenas arquivos que já tenham vários links, esse diretório não precisará ser criado no destino.

    
por Tom Ribbens 08.12.2012 / 14:05

2 respostas

3

Como os hard links são bastante baratos, você pode torná-los como: (isso fará o hard link de todos os arquivos, e criará o diretório como na fonte)

cp -al source dest

Depois, você pode remover os hardlinks que estão em algum outro local no seu sistema de arquivos. (se um link duplo for um problema) Usando o comando find ligeiramente adaptado que você postou.

    
por 09.10.2014 / 12:11
0

Se eu entendi sua pergunta corretamente e você tem um diretório ( sourcedir ) com vários subdiretórios e os arquivos vinculados podem estar em /sourcedir/ ou /sourcedir/foo ou /sourcedir/bar etc, isso deve ser feito o que você precisa:

find /sourcedir/ -links 1  | sed 's/.sourcedir.//' | while read n; do \
  mkdir -p /destdir/'dirname "$n"'; ln /sourcedir/"$n" /destdir/"$n"; \
done

Ele usa dirname para obter o subdiretório de cada arquivo e mkdir -p para criar a estrutura de diretórios no diretório de destino.

    
por 08.12.2012 / 16:36