我們通常使用cp、rsync和scp等命令將文件從一個位置復制到另一個現有位置。如果目標位置不存在,我們首先創建它,然后將文件復制到新創建的位置。到目前為止,我通常是這樣從命令行將文件從一個位置復制到另一個位置的。你知道我們可以復制一個文件,并自動創建目標目錄(如果目錄不存在時),在本文中,我們將看到如何在Linux系統服務器中用一條命令同時復制文件和創建目標目錄。
請注意,我說的不是將兩個命令結合起來。例如,任何人都可以通過組合下面的兩個命令來完成這個任務。
$ mkdir -p destination && cp source_file destination
這不是一個命令。這里我們用了兩個命令,即mkdir和cp。這實際上是一個單行命令。現在讓我來演示一下如何只用一條命令來完成同樣的任務。
在Linux中同時復制文件和創建目標目錄的方法
我們可以使用三種不同的方法來做到這一點。首先,我們將看到如何使用install命令來做到這一點。
方法1 – 使用install命令
install命令將文件復制到Linux中你所選擇的任何位置。它專門用于構建系統之類的系統,例如automake。它是GNU coreutils的一部分,因此您不需要安裝它。
要使用 install 命令復制文件并同時創建目標目錄,只需運行。
$ install -D source-file destination-Directory
例子:
以下命令將名為的文件復制到名為sk.txt的目標目錄8a。請注意,目標目錄不存在。我們將使用install以下命令同時復制文件并創建目標目錄:
$ install -D sk.txt 8a/sk.txt
通過使用以下ls命令列出文件的內容,驗證文件是否已復制到目錄中:
$ ls 8a/
此方法有一些限制。您必須在目標位置的末尾提及源文件名。如果未指定文件名,則install命令將不會復制該文件名并顯示以下錯誤:
$ install -D sk.txt 8a/
install: target ‘8a/’ is not a Directory: No such file or Directory
您一次只能復制一個文件。無法使用install命令將多個文件復制到多個目標。
我們還可以使用install以下指南中所述的命令同時復制文件并更改所有權,權限。
方法2-使用cp命令
通常,我們使用cp命令將文件從一個位置復制到另一位置。該cp命令具有一個名為的選項–parents,使我們能夠復制源文件的整個目錄結構并將其保存在目標位置。
比如說,sk.txt文件保存在~/Downloads目錄下,你想把它復制到~/Documents目錄下。如果你使用cp命令將文件從~/Downloads復制到~/Documents,文件將保存在這樣的目錄結構中 -> ~/Documents/Downloads/sk.txt。
實際操作命令:
$ cp –parents Downloads/sk.txt ~/Documents/
現在運行tree命令以檢查~/Documents目錄的內容:
$ tree Documents/
請記住,我們并沒有在 ~/Documents 位置內創建任何目錄。cp命令的–parents選項保留了源文件的目錄結構。
與install命令不同的是,你不需要在目標目錄的最后指定文件名。
方法3-使用rsync命令
Rsync是在本地和遠程目錄之間復制和備份數據的理想解決方案。要使用rsync命令同時復制文件并創建目標目錄,請運行:
$ rsync sk.txt 8a/
被調用的目錄8a不必存在。Rsync將自動創建它并將源文件保存在其中。
在這三個命令中,我更喜歡該install命令。因為,我可以使用install命令創建嵌套目錄(另一個目錄內的目錄)。據我所知,cp和rsync命令只能創建一個目錄。