3 回答

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