我想创建指向某个目录中ln -s
所有文件(或一类文件,例如以 结尾)的符号链接 ( ) 。假设我在 cwd 中,输入.bar
ls ../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
cp
with-s
选项可以创建软链接(或-l
为硬链接)。
从当前目录可以像这样使用:
$ cp -s ../path/with/scripts/* .
对于你来说,情况将会是这样的:
$ cp -s ../source/*.bar .