《LINUX教學:cp 命令兩個高效的用法》要點:
本文介紹了LINUX教學:cp 命令兩個高效的用法,希望對您有用。如果有疑問,可以聯系我們。
Linux 中高效的備份拷貝敕令
在 Linux 上能使用鼠標點來點去的圖形化界面是一件很美妙的事……但是如果你喜歡的開發交互環境和編譯器是終端窗口、Bash 和 Vim,那你應該像我一樣常常和終端打交道.
即使是不經常使用終端的人,如果對終端環境深入了解也能獲益良多.舉個例子—— cp
命令,據 維基百科 的解釋,cp
(意即 copy)命令是第一個版本的 Unix 系統的一部門.連同一組其它的命令 ls
、mv
、cd
、pwd
、mkdir
、vi
、sh
、sed
和 awk
?,還有提到的 cp
都是我在 1984 年接觸 System V Unix 系統時所學習的命令之一.cp
命令最常見的用法是制作文件副本.像這樣:
cp sourcefile destfile
在終端中執行此命令,上述命令將名為 sourcefile
的文件復制到名為 destfile
的文件中.如果在執行命令之前 destfile
文件不存在,那將會創立此文件,如果已經存在,那就會覆蓋此文件.
這個命令我不知道自己用了多少次了(我也不想知道),但是我知道在我編寫測試代碼的時候,我經常用,為了保存當前正常的版本,而且又能繼續修改,我會輸入這個命令:
cp test1.py test1.bak
在過去的30多年里,我使用了無數次這個命令.另外,當我決定編寫我的第二個版本的測試法式時,我會輸入這個命令:
cp test1.py test2.py
這樣就完成了修改法式的第一步.
我通常很少查看?cp
命令的參考文檔,然則當我在備份我的圖片文件夾的時候(在 GUI 環境下使用 “file” 應用),我開始思考“在?cp
?命令中是否有個參數支持只復制新文件或者是修改過的文件.”果然,真的有!
?
好比說在我的電腦上有一個存放各種文件的文件夾,另外我要不時的往里面添加一些新文件,而且我會不時地修改一些文件,例如我手機里下載的照片或者是音樂.
假設我收集的這些文件對我而言都很有價值,我有時候會想做個拷貝,就像是“快照”一樣將文件保留在其它媒體.當然目前有很多程序都支持備份,但是我想更為精確的將目錄結構復制到可移動設備中,方便于我經常使用這些離線設備或者連接到其它電腦上.
?cp
?命令提供了一個易如反掌的辦法.例子如下:
在我的?Pictures
?文件夾下,我有這樣一個文件夾名字為?Misc
.為了便利說明,我把文件拷貝到 USB 存儲設備上.讓我們開始吧!
me@desktop:~/Pictures$ cp -r Misc /media/clh/4388-D5FE
me@desktop:~/Pictures$
上面的命令是我從依照終端窗口中完整復制下來的.對于有些人來說不是很適應這種環境,在我們輸入命令或者執行命令之前,需要注意的是?me@mydesktop:~/Pictures
?這個前綴,me
這個是當前用戶,mydesktop
這是電腦名稱,~/Pictures
這個是當前工作目錄,是 /home/me/Pictures
完整路徑的縮寫.
我輸入這個命令 cp -r Misc /media/clh/4388-D5FE
并執行后 ,拷貝?Misc
?目錄下所有文件(這個?-r
參數,全稱 “recursive”,遞歸處置,意思為本目錄下所有文件及子目錄一起處置)到我的 USB 設備的掛載目錄?/media/clh/4388-D5FE
.
執行命令后回到之前的提示,大多數命令繼承了 Unix 的特性,在命令執行后,如果沒有任何異常什么都不顯示,在任務結束之前不會顯示像 “execution succeeded” 這樣的提示消息.如果想獲取更多的反饋,就使用 -v
參數讓執行成果更詳細.
下圖中是我的 USB 設備中方才拷貝過來的文件夾?Misc
?,里面總共有 9 張圖片.
Image of the new copy of Misc on the USB drive
假設我要在原始拷貝路徑下?~/Pictures/Misc
下添加一些新文件,就像如許:
New files added to the master directory
如今我想只拷貝新的文件到我的存儲設備上,我就使用?cp
的“更新”和“詳細”選項.
me@desktop:~/Pictures$ cp -r -u -v Misc /media/clh/4388-D5FE
'Misc/asunder.png'->'/media/clh/4388-D5FE/Misc/asunder.png'
'Misc/editing tags guayadeque.png'->'/media/clh/4388-D5FE/Misc/editing tags guayadeque.png'
'Misc/misc on usb.png'->'/media/clh/4388-D5FE/Misc/misc on usb.png'
me@desktop:~/Pictures$
上面的第一行中是?cp
?敕令和具體的參數(-r
?是“遞歸”,?-u
?是“更新”,-v
是“詳細”).接下來的三行顯示被復制文件的信息,最后一行顯示敕令行提示符.
通常來說,參數?-r
?也可用更詳細的風格 --recursive
.然則以簡短的方式,也可以這么連用 -ruv
.
?
回到一開始的例子中,我在開發的時候按期給我的代碼版本進行備份.然后我找到了另一種更好用的?cp
?參數.
假設我正在編寫一個非常有用的 Python 程序,作為一個喜歡不斷修改代碼的開發者,我會在一開始編寫一個程序簡單版本,然后不停的往里面添加各種功能直到它能成功的運行起來.比喻說我的第一個版本就是用 Python 程序打印出 “hello world”.這只有一行代碼的程序就像這樣:
print'hello world'
然后我將這個代碼保留成文件命名為?test1.py
.我可以這么運行它:
me@desktop:~/Test$ python test1.py
hello world
me@desktop:~/Test$
現在法式可以運行了,我想在添加新的內容之前進行備份.我決定使用帶編號的備份選項,如下:
clh@vancouver:~/Test$cp--force --backup=numbered test1.py test1.py
clh@vancouver:~/Test$ls
test1.py test1.py.~1~
clh@vancouver:~/Test$
以是,上面的做法是什么意思呢?
第一,這個?--backup=numbered
?參數意思為“我要做個備份,而且是帶編號的連續備份”.所以一個備份便是 1 號,第二個便是 2 號,等等.
第二,如果源文件和目標文件名字是一樣的.通常我們使用?cp
?命令去拷貝成本身,會得到這樣的報錯信息:
cp:'test1.py'and'test1.py' are the same file
在特殊環境下,如果我們想備份的源文件和目標文件名字相同,我們使用?--force
參數.
第三,我使用?ls
?(意即 “list”)敕令來顯示現在目錄下的文件,名字為?test1.py
的是原始文件,名字為?test1.py.~1~
的是備份文件
假如現在我要加上第二個功能,在法式里加上另一行代碼,可以打印 “Kilroy was here.”.現在法式文件?test1.py
的內容如下:
print'hello world'
print'Kilroy was here'
看到 Python 編程多么簡單了嗎?不管怎樣,如果我再次執行備份的步調,結果如下:
現在我有有兩個備份文件:?test1.py.~1~
包括了一行代碼的程序,和?test1.py.~2~
包括兩行代碼的程序.
這個很好用的功效,我考慮做個 shell 函數讓它變得更簡單.
?
第一,Linux 手冊頁,它在大多數桌面和服務器發行版都默認安裝了,它提供了更為詳細的使用辦法和例子,對于?cp
命令,在終端中輸入如下命令:
mancp
對于那些想學習如何使用這些命令,但不清楚如何使用的用戶應該首先看一下這些闡明,然后我建議創建一個測試目錄和文件來嘗試使用命令和選項.
第二,興趣是最好的老師.在你最喜歡的搜索引擎中搜索 “linux shell tutorial”,你會得到很多有趣和有用的資源.
第三,你是不是在想,“為什么我要用這么麻煩的辦法,圖形化界面中有相同的功能,只用點擊幾下豈不是更簡單?”,關于這個問題我有兩個理由.首先,在我們工作中需要中斷其他工作流程以及大量使用點擊動作時,點擊動作可就不簡單了.其次,如果我們要完成流水線般的重復性工作,通過使用 shell 腳本和 shell 函數以及 shell 重命名等功能就能很輕松的實現.
你還知道關于?cp
?敕令其他更棒的使用方式嗎?請在留言中積極回復哦~
(題圖:stonemaiergames.com)
作者簡介:
Chris Hermansen - 1978 年卒業于英國哥倫比亞大學后一直從事計算機相關職業,我從 2005 年開始一直使用 Linux、Solaris、SunOS,在那之前我就是 Unix 系統管理員了,在技術方面,我的大量的職業生涯都是在做數據分析,尤其是空間數據分析,我有大量的編程經驗與數據分析經驗,熟練使用 awk、Python、PostgreSQL、PostGIS 和 Groovy.
via: https://opensource.com/article/17/7/two-great-uses-cp-command
作者:Chris Hermansen 譯者:bigdimple 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
本文永遠更新鏈接地址:
學習更多LINUX教程,請查看站內專欄,如果有LINUX疑問,可以加QQ交流《LINUX教學:cp 命令兩個高效的用法》。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9286.html