Jak mogę dowiązać symbolicznie każdy plik z jednego katalogu do innego katalogu?

15

Jeśli mam katalog /fooz kilkoma plikami w nim, w jaki sposób podlinkowujemy Każdy wpis /foodo /bar/?

Na przykład, jeśli /fooma pliki a, ba cchcę, aby utworzyć trzy dowiązania:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c
Steven
źródło
Czy na pewno nie chcesz po prostu paska dowiązań symbolicznych do foo?
Rich Bradshaw,
Faktyczne zastosowanie tego polega na tym, że zainstalowałem program i chciałbym przenieść jego pliki wykonywalne do standardowego folderu w moim $ PATH zamiast dodawać zainstalowany plik do ścieżki.
Steven
Wydaje się, że lepszym pomysłem byłoby po prostu skonfigurowanie go --prefix=.
Cześć71,

Odpowiedzi:

18

Możesz użyć (GNU) cpz --symbolic-linkopcją:

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
źródło
To wydaje się być dokładnie rozwiązaniem. Niesamowite!
Steven
To jest bardzo idealne.
noraj
jakikolwiek sposób, aby to również dotyczyło katalogów? Po uruchomieniu tego pojawia się ostrzeżenie „cp: omiting directory './baz'”
solidau
15

Wypróbuj to:

ln -s /foo/* /bar

Katalog źródłowy, jak określono w pytaniu, to /foo. Pamiętaj, że musi być w pełni określony (tj. Zaczynając od katalogu głównego), więc inne przykłady wyglądałyby tak:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff
Wstrzymano do odwołania.
źródło
czy to w ogóle działa?
ctrlc-root
@ root.ctrlc: Musisz podać pełną ścieżkę do źródła (co jest /w mojej oryginalnej odpowiedzi). Dodam wyjaśnienie.
Wstrzymano do odwołania.
Myślę, że jeśli chcesz skopiować wszystko jako dowiązanie symboliczne za pomocą tylko jednego polecenia, musisz użyć cp -s jak @hlovdal answer, cp -rs /var/www/folder/ .kopiuje wszystkie pliki podfolderów jako dowiązanie symboliczne, a nie tego, ln -s /var/www/folder/ .kto skopiował pliki podfolderów na moim komputerze.
baptx
2

Coś takiego?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
garyjohn
źródło