2012-09-21 30 views
0

當我在cp中使用*時,我認爲它遵循與regex相同的規則。 所以"cp temp/* test/"應該複製一切,但是,當臨時文件夾爲空時,它會拋出異常,說它無法找到文件或目錄,這表明*無法匹配「無」。通配符在Linux cp

然後,我創建下一個臨時文件test.txt做:

cp temp/test.txt* test/ 

它的工作原理,這表明*確實符合「無」。

我弄不清楚的行爲。任何人都可以解釋一下嗎?

感謝

回答

3

發生了什麼事是*擴張是由你的shell(bash可能)來完成。圖案temp/testfile.txt*確實匹配temp/testfile.txt*零個或多個字符匹配),因此bash中通過了到cp

然而,bash設置,默認情況下,通過通配符原樣到應用程序,如果它不匹配任何東西(有叫nullglob把這種非直觀的行爲關閉的選項)。所以它通過temp/*字面上的cp,它抱怨說它不存在。

+0

感謝您的幫助解釋。我仍然想知道爲什麼「temp temp/test /」在temp內沒有任何內容時工作?謝謝 – Frank

+0

你可以仔細檢查一下嗎?當我嘗試'cp temp /。測試/'我得到'cp:temp /。是一個目錄(不復制)。(Mac OS)或'cp:省略目錄\'temp /。''(Linux)。 –

1

殼做的擴展,所以它不是cp具體。

如果沒有發現匹配,有沒有替代,原始的字符串(temp/*)被保留並傳遞給應用程序。當然cp找不到那個名字的文件。

# echo nosuchfile* 
nosuchfile* 

一些澄清爲 「無」:

temp/*意味着temp目錄條目(文件/目錄/ ...),但沒有發現任何文件,所以失敗了。

temp/test.txt*表示在temp目錄中以test.txt開頭的條目。

0

通配符globbing是不一樣的正則表達式,完全用自己的規則。

不同shell有不同的規則......你讓想看看Wikipdia得到一個概述。