如何将一个目录中的每个文件符号链接到另一个目录?


15

如果我的目录中/foo包含几个文件,如何将每个条目符号链接/foo/bar/

例如,如果/foo有文件ab并且c,我想创建三个符号链接:

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

您确定不只是要将bar符号链接到foo吗?
Rich Bradshaw

实际的应用是我安装了一个程序,并希望将其可执行文件移动到$ PATH中的标准文件夹中,而不是将已安装的可执行文件添加到路径中。
史蒂芬

似乎只用配置它会是一个更好的主意--prefix=
Hello71 2011年

Answers:


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$

这似乎就是解决方案。太棒了!
史蒂文

这是非常完美的。
noraj

有什么办法使它也适用于目录吗?运行此命令时,我收到警告“ 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答案),将cp -rs /var/www/folder/ .每个子文件夹文件复制为符号链接,而不是像谁ln -s /var/www/folder/ .在我的计算机上复制了子文件夹文件。
baptx

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.