Как я могу символическую ссылку каждого из файлов в одном каталоге в другой каталог?

15

Если у меня есть каталог /fooс несколькими файлами в нем, как я симлинка каждую записи в /fooв /bar/?

Например, если /fooесть файлы a, bи cя хочу создать три символические ссылки:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c
Стивен
источник
Вы уверены, что не хотите просто символьную строку для foo?
Рич Брэдшоу
Реальное применение этого в том, что я установил программу и хотел бы переместить ее исполняемые файлы в стандартную папку в моем $ PATH, а не добавлять установленную в путь.
Стивен
Кажется, что было бы лучше просто настроить его --prefix=.
Hello71

Ответы:

18

Вы можете использовать (GNU) cpс --symbolic-linkопцией:

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
источник
Похоже, это и есть решение. Потрясающие!
Стивен
Это очень идеально.
Норадж
Есть ли способ сделать это применимо и к каталогам? Когда я запускаю это, я получаю предупреждение "cp: пропуск каталога './baz'"
solidau
15

Попробуйте это:

ln -s /foo/* /bar

Исходный каталог, как указано в вопросе, является /foo. Обратите внимание, что он должен быть полностью указан (то есть начиная с корневого каталога), поэтому другие примеры будут выглядеть так:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff
Приостановлено до дальнейшего уведомления.
источник
это вообще работает?
ctrlc-root
@ root.ctrlc: Вы должны указать полный путь к источнику ( /в моем исходном ответе). Я добавлю уточнение.
Приостановлено до дальнейшего уведомления.
Я думаю, что если вы хотите скопировать все как символическую ссылку только с помощью одной команды, вы должны использовать cp -s, например @hlovdal answer, cp -rs /var/www/folder/ .копировать файлы каждой подпапки как символическую ссылку, а не ln -s /var/www/folder/ .копировать файлы подпапок на моем компьютере.
Baptx
2

Что-то вроде этого?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
garyjohn
источник