【问题标题】:Bash script creates symlink inside directory aswellBash 脚本也在目录内创建符号链接
【发布时间】: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.netHow 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


【解决方案1】:

由于您不想递归到子目录,请尝试使用

for file in `ls -l | grep -v ^d | awk '{print $NF;}'`

或在查找中使用-type f 排除子目录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多