2015-05-25 101 views
0

我有以下zsh腳本,它將給定目錄(README.md除外)中的所有文件符號鏈接到我的主目錄,每個文件名前面有前導.zsh - 在glob循環中包含目錄

setopt EXTENDED_GLOB 
for rcfile in "${ZDOTDIR:-$HOME}"/.dotfiles/home/^README.md(.N); do 
    ln -fsv "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" 
done 

的問題是水珠似乎不包括內部"${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也被排除在外,但我希望它(和任何其他目錄)被包括在內。

+0

我認爲你必須定義ZDOTDIR賦予它像 ZDOTDIR =〜/ .dotfiles或類似成才的值,否則將zsh的$ HOME設置它。其他問題是:不要忘記在zsh而不是bash中執行該過程。 – SergioAraujo

回答

1

您用於循環的模式的globbing限定詞((.N))中的.將匹配限制爲純文件(無目錄,無符號鏈接等)。只要將它放開,它也會找到目錄(或任何其他文件類型)。

有關通配符和通配符限定符的更多信息,請參見man 1 zshexpn。或者在線的ZSH Documentation on Filename Generationhere is the subsection on Glob Qualifiers

您還需要將選項添加到-nln,否則符號鏈接將被放入該鏈接的目錄,而不是覆蓋鏈接本身的。

所以這應該按預期工作:

setopt EXTENDED_GLOB 
for rcfile in "${ZDOTDIR:-$HOME}"/.dotfiles/home/^README.md(N); do 
    ln -fsnv "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" 
done 
+0

非常好,非常感謝。我查找過有關'zsh'的擴展glob語法的信息,但找不到太多信息。你有鏈接到可以解釋一切的東西嗎? – KPthunder

+0

zsh有一個相當廣泛的文檔,您可以通過manpages('man zshall'來獲取所有內容)或[online](http://zsh.sourceforge.net/Doc/)來訪問它。我還添加了相關的鏈接到答案。 – Adaephon