3 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
簡短答案
要復(fù)制myfile.txt到/foo/bar/myfile.txt,請使用:
mkdir -p /foo/bar && cp myfile.txt $_
這是如何運作的?
這有幾個組成部分,因此我將逐步介紹所有語法。
POSIX標(biāo)準(zhǔn)中指定的mkdir實用程序創(chuàng)建目錄。的說法,每文檔,會造成MKDIR到-p
創(chuàng)建任何缺少的中間路徑名組件
意味著在調(diào)用時mkdir -p /foo/bar,mkdir將創(chuàng)建/foo , /foo/bar如果/foo尚不存在。(如果沒有-p,它將拋出錯誤。
如POSIX標(biāo)準(zhǔn)(或Bash手冊,如果您愿意)&&中所述,列表運算符的作用是只有成功執(zhí)行后才能執(zhí)行。這意味著如果由于失敗的多種原因之一而失敗,該命令將不會執(zhí)行。cp myfile.txt $_mkdir -p /foo/barcpmkdir
最后,$_作為第二個參數(shù)傳遞的cp是“特殊參數(shù)”,它可以避免重復(fù)長參數(shù)(如文件路徑)而不必將其存儲在變量中。根據(jù)Bash手冊,它:
擴展到上一個命令的最后一個參數(shù)
在這種情況下,這就是/foo/bar我們傳遞給的mkdir。因此,cp命令將擴展為cp myfile.txt /foo/bar,將復(fù)制myfile.txt到新創(chuàng)建的/foo/bar目錄中。
請注意,$_是不是 POSIX標(biāo)準(zhǔn)的一部分,所以理論上Unix的變種可能具有不支持此構(gòu)建物的外殼。但是,我不知道任何不支持的現(xiàn)代外殼$_;當(dāng)然Bash,Dash和zsh都可以。
最后一點:在此答案開頭給出的命令假定您的目錄名稱中沒有空格。如果要處理帶有空格的名稱,則需要用引號將它們引起來,不會被視為mkdir或的不同參數(shù)cp。因此,您的命令實際上如下所示:
mkdir -p "/my directory/name with/spaces" && cp "my filename with spaces.txt" "$_"
添加回答
舉報