Comment créer un lien symbolique entre chacun des fichiers d'un répertoire et un autre répertoire?


15

Si j'ai un répertoire /foocontenant quelques fichiers, comment créer un lien symbolique pour chaque entrée /foovers /bar/?

Par exemple, si /fooa les fichiers a, bet c, je veux créer trois liens symboliques:

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

Êtes-vous sûr de ne pas simplement vouloir créer un lien symbolique vers foo?
— Rich Bradshaw

L'application réelle de ceci est que j'ai installé un programme et que je voudrais déplacer ses exécutables vers un dossier standard dans mon $ PATH plutôt que d'ajouter celui installé au chemin.
— Steven

Il semble que ce serait une meilleure idée de simplement le configurer avec --prefix=.
— Hello71

Réponses:


18

Vous pouvez utiliser (GNU) cpavec l' --symbolic-linkoption:

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$

Cela semble être exactement la solution. Impressionnant!
— Steven

C'est très parfait.
— noraj

un moyen de faire en sorte que cela s'applique également aux répertoires? Lorsque j'exécute ceci, j'obtiens un avertissement "cp: omettant le répertoire './baz'"
— solidau

15

Essayez ceci:

ln -s /foo/* /bar

Le répertoire source, comme spécifié dans la question, est /foo. Notez qu'il doit être entièrement spécifié (c'est-à-dire en commençant par le répertoire racine), donc d'autres exemples ressembleraient à ceci:

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

ça marche même?
— ctrlc-root

@ root.ctrlc: Vous devez spécifier le chemin complet de la source (qui se trouve /dans ma réponse d'origine). J'ajouterai une précision.
— pause jusqu'à nouvel ordre.

Je pense que si vous voulez tout copier en tant que lien symbolique avec une seule commande, vous devez utiliser des cp -s comme @hlovdal answer, cp -rs /var/www/folder/ .copie tous les fichiers de sous-dossiers en tant que lien symbolique, pas comme ln -s /var/www/folder/ .qui a dupliqué les fichiers de sous-dossiers sur mon ordinateur.
— baptx

2

Quelque chose comme ça?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.