【发布时间】:2017-08-26 08:50:31
【问题描述】:
我有一个 bash 脚本:
for file in `find -mindepth 1 -maxdepth 1`
do
old=`pwd`
new=".${file##*/}"
newfile="$old/${file##*/}"
cd
wd=`pwd`
link="$wd/$new"
ln -s -f $newfile $link
cd $old
done
这是为了在用户的主目录中使用“.”创建符号链接。附加到当前工作目录中的所有文件和目录。这很好用,但是,它还会在任何子目录中创建指向同一目录的符号链接。例如。 foo 现在将在 ~/.foo 和 foo/foo 处有一个链接。
有什么办法可以解决这个问题吗?
编辑:感谢 Sameer Naik 和 dave_thompson_085,我对其进行了一些更改,但即使将备用目录作为参数给出,问题仍然存在。这不是子目录的问题,而是创建了两个链接,一个到 ~/.foo123,一个到 foo123/foo123,没有链接到 ~/ 用于 foo1 和 foo1/foo2。
for file in `ls -l | grep -v total | awk '{print $NF;}'`
do
old=`pwd`
wd=`cd $1 && pwd`
new=".${file}"
newfile="$wd/${file}"
cd
wd=`pwd`
link="$wd/$new"
ln -s -f $newfile $link
cd $old
done
【问题讨论】:
-
没有尝试运行它......它也可以在所有目录上运行,因为您将它们包含在查找中。这是需要的吗?
-
这可能会有所帮助:shellcheck.net 和 How to debug a bash script?
-
@tink 用于自动化我的 dotfile 安装,所以我希望它适用于目录中的所有内容
-
for f in $PWD/*; do ln -s "$f" "$HOME/.${f##*/}"; done-- 如果要包含(已经)是点文件的目标文件(将变成双点!),则设置dotglob;如果你只想要文件而不是目录,请让它test -f "$f" && ln ...PS:'append' 意味着在最后添加;在开头添加被称为(有点拱形)“前置” -
@dave_thompson_085 我已经有一个脚本可以在上传到 github 之前删除所有内容上的点,所以这不是问题。我的问题是创建链接后的每个目录,所有内容都将位于主目录中,并在文件前加上点(感谢),但 dotfile 目录中的每个文件夹也都有指向该文件夹的链接,例如 ~/ .foo 和 foo/foo。不过感谢您的帮助,我可能会在稍后添加。
标签: linux bash shell unix symlink