【发布时间】:2015-05-27 02:14:00
【问题描述】:
我有以下 zsh 脚本,它将给定目录中的所有文件(README.md 除外)符号链接到我的主目录,每个文件名前面都有一个前导 .。
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.dotfiles/home/^README.md(.N); do
ln -fsv "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
问题是 glob 似乎不包含 "${ZDOTDIR:-$HOME}"/.dotfiles/home/ 内的任何目录,只是常规文件。如何在此循环中包含目录(例如,目录/Users/user/.dotfiles/home/vim 符号链接到/Users/user/.vim)?我用find 尝试了一些东西,但如果可能的话,我更愿意坚持纯zsh 脚本。
作为参考,这里是这个目录的列表:
README.md
gitconfig
tmux.conf
vim
vimrc
zlogin
zprofile
zshenv
zshrc
这是循环每次迭代的值:
/Users/user/.dotfiles/home/gitconfig
/Users/user/.dotfiles/home/tmux.conf
/Users/user/.dotfiles/home/vimrc
/Users/user/.dotfiles/home/zlogin
/Users/user/.dotfiles/home/zprofile
/Users/user/.dotfiles/home/zshenv
/Users/user/.dotfiles/home/zshrc
所以README.md 被排除在外,正如我的意图,但vim 也被排除在外,但我希望它(和任何其他目录)被包括在内。
【问题讨论】:
-
我认为你必须定义 ZDOTDIR 为它分配一个像 ZDOTDIR=~/.dotfiles 或类似的值,否则 zsh 会将 $HOME 设置为它。另一个问题是:不要忘记在 zsh 而不是 bash 中执行该过程。