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.