Como vinculo cada um dos arquivos em um diretório para outro?

15

Se eu tiver um diretório /foocom alguns arquivos nele, como faço para ligar simbolicamente cada entrada /fooem /bar/?

Por exemplo, se /footiver os arquivos a, be ceu quero criar três links simbólicos:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c
Steven
fonte
Tem certeza de que não deseja apenas ligar a barra de links simbólicos?
Rich Bradshaw
A aplicação real disso é que eu instalei um programa e gostaria de mover seus executáveis ​​para uma pasta padrão no meu $ PATH, em vez de adicionar o programa instalado ao caminho.
11111 Steven
Parece que seria uma idéia melhor apenas configurá-lo --prefix=.
Hello71

Respostas:

18

Você pode usar (GNU) cpcom a --symbolic-linkopção:

prompt$ mkdir foo
prompt$ cd foo
prompt$ touch a b c
prompt$ mkdir ../bar
prompt$ cd ../bar
prompt$ cp --symbolic-link ../foo/* .
prompt$ ls -l
total 0
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 a -> ../foo/a
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 b -> ../foo/b
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 c -> ../foo/c
prompt$
hlovdal
fonte
Esta parece ser exatamente a solução. Impressionante!
Steven
Isto é muito perfeito.
Noraj 28/12
alguma maneira de fazer isso se aplicar a diretórios também? Quando eu executo isso, recebo o aviso "cp: omitindo o diretório './baz'"
solidau 13/09/19
15

Faça uma tentativa:

ln -s /foo/* /bar

O diretório de origem, conforme especificado na pergunta, é /foo. Observe que ele deve ser totalmente especificado (ou seja, iniciando no diretório raiz), para que outros exemplos sejam assim:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff
Pausado até novo aviso.
fonte
isso funciona mesmo?
Ctrlc-root
@ root.ctrlc: Você deve especificar o caminho completo da fonte (que está /na minha resposta original). Vou adicionar um esclarecimento.
Pausado até novo aviso.
Acho que se você quiser copiar tudo como link simbólico com apenas um comando, precisará usar cp -s como @hlovdal answer, cp -rs /var/www/folder/ .copiar todos os arquivos de subpastas como link simbólico, não como ln -s /var/www/folder/ .quem duplicou os arquivos de subpastas no meu computador.
baptx
2

Algo assim?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
garyjohn
fonte