1

我正在尝试修改thinkbot 的 bash 脚本以将点文件符号链接到主目录,但我想将文件存储在子目录中。

Thoughtbot 脚本的原文是:

#!/bin/sh

for name in *; do
  target="$HOME/.$name"
  if [ -e "$target" ]; then
    if [ ! -L "$target" ]; then
      echo "WARNING: $target exists but is not a symlink."
    fi
  else
    echo "Creating $target"
    ln -s "$PWD/$name" "$target"
  fi
done

我的点文件位于名为files. 我尝试将 for 循环更改为:

for name in files/*, for name in ./files/*, for name in 'files/*', 等等,但这些都不起作用。

经过一番研究,我发现您可以使用find如下方式遍历子目录中的文件:

find ./files -type f -exec "do stuff here"  \;

而且我看到我可以使用 来引用每个文件'{}',但我不明白如何对文件进行操作并创建符号链接。

我试过了:

find ./files -type f -exec "ln -s '{}' $HOME/'{}'"  \;

但这不起作用,因为'{}'它是来自父目录的文件的相对路径,而不仅仅是文件的名称。

这样做的正确方法是什么?

作为参考,这是我的目录结构:

https://github.com/mehulkar/dotfiles

4

2 回答 2

1

您的原始脚本不适用于点文件,因为您需要说:

shopt -s dotglob

for file in *

默认情况下不会匹配以点开头的文件名。

于 2013-10-24T20:10:23.517 回答
0

...但这不起作用,因为'{}'是文件从父目录的相对路径,而不仅仅是文件的名称。

尝试

find `pwd`/files -type f -exec "ln -s '{}' $HOME/'{}'"  \;

或者

find $(pwd)/files -type f -exec "ln -s '{}' $HOME/'{}'"  \;
于 2013-10-24T20:07:09.307 回答