我需要将循环作为字符串执行。这:
bash -c "for l in $(/bin/ls /dir1); do /bin/ln -sf $l /dir2/; done"
给出错误:
/bin/bash: -c: line 1: syntax error near unexpected token `file1'
/bin/bash: -c: line 1: `file1'
file1 是我想在第一个目录中转换为符号链接的文件之一。
答案1
不解析 ls 输出:http://mywiki.wooledge.org/ParsingLs。
另外,在此示例中,您不需要循环,只需让ln
循环遍历 args 即可。 cd
到要在其中创建符号链接的目录,如果您希望相对符号链接目标在使用当前目录中的相对路径生成它们时起作用。
(cd /dir1 && ln -sf -- * /dir2) # make broken symlinks in dir2
(cd /dir2 && ln -sf -- ../dir1/* .) # make relative symlinks
ln -sf /dir1/* /dir2/ # make absolute symlinks
(subshell)
以避免更改当前 shell 中的目录。
您还可以使用ln -sf -t /dir2 -- *
,这与 很有用find -exec ln -t /dir {} +
,因为find -exec {} +
只能将列表放在命令行末尾。
GNUcp
还具有创建硬/符号链接的选项-l
。-s