Come faccio a collegare simbolicamente ciascuno dei file in una directory a un'altra directory?


15

Se ho una directory /foo con alcuni file in esso, come faccio a collegare in modo simbolico ogni voce in /foo in /bar/?

Ad esempio, se /foo ha i file a, b e c, Voglio creare tre link simbolici:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c

Sei sicuro di non voler semplicemente associare la barra a pippo?
Rich Bradshaw

L'effettiva applicazione di questo è che ho installato un programma e vorrei spostare i suoi eseguibili in una cartella standard nel mio $ PATH piuttosto che aggiungere quello installato al percorso.
Steven Xu

Sembra che sarebbe una buona idea configurarlo con --prefix=.
Hello71

Risposte:


15

Puoi usare (GNU) cp con il --symbolic-link opzione:

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$

Questa sembra essere esattamente la soluzione. Eccezionale!
Steven Xu

Questo è molto perfetto.
noraj

15

Fare un tentativo:

ln -s /foo/* /bar

La directory di origine, come specificato nella domanda, è /foo. Si noti che deve essere completamente specificato (vale a dire iniziando dalla directory root), quindi altri esempi dovrebbero assomigliare a questo:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff

funziona anche questo?
ctrlc-root

@ root.ctrlc: Devi specificare il percorso completo della sorgente (che è / nella mia risposta originale). Aggiungerò un chiarimento.
Dennis Williamson

Penso che se vuoi copiare tutto come link simbolico con un solo comando, devi usare cp -s come risposta @hlovdal, cp -rs /var/www/folder/ . copia ogni file di sottocartelle come link simbolico, non come ln -s /var/www/folder/ . che ha duplicato i file delle sottocartelle sul mio computer.
baptx

2

Qualcosa come questo?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.