如何將文件夾中的所有文件移動到 zsh w/Mac OS X 中的子文件夾?
這個問題基本上是這個的副本:https ://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
但相反,我問的是如何使用 oh-my-zsh 在 Mac OS X 終端中執行此操作。
我對給出的解決方案的問題是它們似乎在我的終端中不起作用(在這裡用“oldCodeBase”替換問題中的文件夾“new”)
[~/Sid/Moonshine_Machine, 127, master+3]: mv !(oldCodeBase) oldCodeBase zsh: number expected
它在這裡期望的數字是多少?
轉向另一個建議的解決方案是使用 shopt 命令。
但我似乎沒有可用的 shopt 命令:
~/Sid/Moonshine_Machine, 1, master+3]: shopt -s extglob dotglob zsh: command not found: shopt
所以在這一點上,這兩種解決方案似乎都不起作用。
編輯:
我發現 zsh 中的“setopt”似乎是與“shopt”相當的命令,但會導致以下問題
[~/Sid/Moonshine_Machine, 127, master+3]: setopt -s extglob dotglob setopt: no such option: extglob
!(pattern)
是一個 ksh glob 運算符。shopt
是 bash shell 的內置命令,用於啟用其選項之一(未使用 啟用的選項set -o
)。bash
的extglob
選項啟用 ksh 擴展 glob 運算符的子集。在
zsh
中,否定與^
extendedglob
操作員一起使用,正如@mdmay74 已經顯示的那樣,並且 zsh 只有一組選項全部用set -o
/切換set +o
(歷史上setopt
/unsetopt
)。所以你會使用:set -o extendedglob mv -- ^oldCodeBase(D) oldCodeBase
筆記:
--
如果有以開頭的文件名,則需要-
(D)
還需要移動隱藏文件(在 中bash
,您將使用shopt -s dotglob
)。zsh 還有一個
kshglob
選項來啟用 ksh 的擴展 glob。但由於這些操作比 zsh 自己的擴展 glob 操作符使用起來更麻煩,因此您通常只將其用作 ksh 仿真 (emulate ksh
) 的一部分,用於幫助解釋為 ksh 編寫的腳本。set -o kshglob mv -- !(oldCodeBase)(D) oldCodeBase
(請注意,除非您還禁用了該選項,否則
!(oldCodeBase)
僅此一項將不起作用,否則將被視為 glob 限定符)。bareglobqual``(oldCodeBase)
更一般地說,您不能假設在一種語言中有效的某件事在另一種語言中也同樣有效,除非該事物來自它們共享的標准或共同遺產。
bash
並且zsh
兩者都有 Bourne、Korn 和 Csh 的傳統,每個都有一種模式,在這種模式下,它們都試圖與 POSIX 兼容,並且還相互複製了一些特性,但它們的語法通常不同。