Como copiar diretórios e arquivos de links simbólicos?

1

Eu tenho um diretório de arquivos grandes (total ~ 1TB) e não quero copiá-los. No entanto, eu gostaria de contorná-los, por isso seria conveniente tê-los ligados em uma hierarquia de diretórios que eu tenho acesso (também conhecido por eu criei). Então

/path/to/dirs/
  foo
  bar
  baz/
    tri

Deve ser copiado para

~/path/to/dirs/
  foo -> /path/to/dirs/foo
  bar -> /path/to/dirs/bar
  baz/
    tri -> /path/to/dirs/tri
    
por Reactormonk 05.05.2013 / 01:33

2 respostas

0

Com o GNU:

cd ~/path/to/dirs || exit 1
find /path/to/dirs -type d -printf %P\0 | xargs -0 mkdir -p 
find /path/to/dirs -type f -print0 | 
  xargs -0 cp --symbolic-link --parents --target-directory=.
    
por 05.05.2013 / 02:11
0

Com o GNU coreutils (ou seja, em Linux ou Cygwin não integrado):

cp -al /path/to/dirs ~/path/to/dirs

Se o seu cp não tiver a opção -l , crie uma primeira passagem para criar a hierarquia de diretórios e, em seguida, uma segunda passagem para os links simbólicos:

find /path/to/dirs -type d -exec sh -c 'for x do mkdir "$HOME$x"; done' _ {} +
find /path/to/dirs ! -type d -exec sh -c 'for x do ln -s "$x" "$HOME$x"; done' _ {} +

Você pode combinar os dois passes em um único comando, se preferir:

find /path/to/dirs -exec sh -c '
  for x do
    if [ -d "$x" ]; then
      mkdir "$HOME$x"
    else
      ln -s "$x" "$HOME$x"
    fi
  done
' _ {} +
    
por 06.05.2013 / 01:20

Tags