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