如何创建指向目录中所有文件(文件类)的符号链接?

如何创建指向目录中所有文件(文件类)的符号链接?

我想创建指向某个目录中ln -s所有文件(或一类文件,例如以 结尾)的符号链接 ( ) 。假设我在 cwd 中,输入.barls ../source/*.bar

foo.bar
baz.bar

我怎样才能将参数列表传递给ln -s它最终解析为

ln -s ../source/foo.bar
ln -s ../source/baz.bar

我当然知道我可以编写一个 bash 脚本,但应该有一些更简单的东西涉及,xargs因为这似乎是一项常见的任务——至少对我来说是这样。

答案1

ln确实需要多个参数,但在这种情况下不要忘记提供目标目录。

因此,在您的示例中.是目标目录,因此它应该很简单

ln -s ../source/*.bar .

man ln;上面的命令使用第三种形式:

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • 在第一种形式中,创建一个名为LINK_NAME的到TARGET的链接。
  • 在第二种形式中,在当前目录中创建到 TARGET 的链接。
  • 在第 3 和第 4 种形式中,创建指向 DIRECTORY 中每个 TARGET 的链接。

答案2

您可以使用 globstar (bash/zsh 设置shopt -s globstar:)递归尝试:

ls -vs ../**/*.bar .

注意:已添加-v以显示详细信息。

或者如果列表太长,使用find实用程序:

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

这将在 中创建链接dest/,或将其更改.为当前文件夹。

答案3

使用find

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

另外,请记住使用完整路径(如果可能)使用符号链接。

答案4

cpwith-s选项可以创建软链接(或-l为硬链接)。

从当前目录可以像这样使用:

$ cp -s ../path/with/scripts/* .

对于你来说,情况将会是这样的:

$ cp -s ../source/*.bar .

相关内容