兩種 cp 命令的絕佳用法的快捷方式
這篇文章是關於如何在使用 cp 命令進行備份以及同步時提高效率。
去年七月,我寫了一篇關於 cp 命令的兩種絕佳用法的文章:備份一個檔案,以及同步一個資料夾的備份。
雖然這些工具確實很好用,但同時,輸入這些命令太過於累贅了。為了解決這個問題,我在我的 Bash 啟動檔案裡建立了一些 Bash 快捷方式。現在,我想把這些捷徑分享給你們,以便於你們在需要的時候可以拿來用,或者是給那些還不知道怎麼使用 Bash 的別名以及函式的使用者提供一些思路。
使用 Bash 別名來更新一個資料夾的副本
如果要使用 cp
來更新一個資料夾的副本,通常會使用到的命令是:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
其中 -r
代表“向下遞迴訪問資料夾中的所有檔案”,-u
代表“更新目標”,-v
代表“詳細模式”,SOURCE-FOLDER
是包含最新檔案的資料夾的名稱,DESTINATION-DIRECTORY
是包含必須同步的SOURCE-FOLDER
副本的目錄。
因為我經常使用 cp
命令來複制資料夾,我會很自然地想起使用 -r
選項。也許再想地更深入一些,我還可以想起用 -v
選項,如果再想得再深一層,我會想起用選項 -u
(不知道這個選項是代表“更新”還是“同步”還是一些什麼其它的)。
或者,還可以使用Bash 的別名功能來將 cp
命令以及其後的選項轉換成一個更容易記憶的單詞,就像這樣:
alias sync='cp -r -u -v'
如果我將其儲存在我的主目錄中的 .bash_aliases
檔案中,然後啟動一個新的終端會話,我可以使用該別名了,例如:
sync Pictures /media/me/4388-E5FE
可以將我的主目錄中的圖片資料夾與我的 USB 驅動器中的相同版本同步。
不清楚 sync
是否已經定義了?你可以在終端裡輸入 alias
這個單詞來列出所有正在使用的命令別名。
喜歡嗎?想要現在就立即使用嗎?那就現在開啟終端,輸入:
echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
然後啟動一個新的終端視窗並在命令提示符下鍵入 alias
。你應該看到這樣的東西:
me@mymachine~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias gvm='sdk'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sync='cp -r -u -v'
me@mymachine:~$
這裡你能看到 sync
已經定義了。
使用 Bash 函式來為備份編號
若要使用 cp
來備份一個檔案,通常使用的命令是:
cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
其中 --force
代表“強制製作副本”,--backup= numbered
代表“使用數字表示備份的生成”,WORKING-FILE
是我們希望保留的當前檔案,BACKED-UP-FILE
與 WORKING-FILE
的名稱相同,並附加生成資訊。
我們不僅需要記得所有 cp
的選項,我們還需要記得去重複輸入 WORKING-FILE
的名字。但當Bash 的函式功能已經可以幫我們做這一切,為什麼我們還要不斷地重複這個過程呢?就像這樣:
再一次提醒,你可將下列內容儲存入你在家目錄下的 .bash_aliases
檔案裡:
function backup {
if [ $# -ne 1 ]; then
echo "Usage: $0 filename"
elif [ -f $1 ] ; then
echo "cp --force --backup=numbered $1 $1"
cp --force --backup=numbered $1 $1
else
echo "$0: $1 is not a file"
fi
}
我將此函式稱之為 backup
,因為我的系統上沒有任何其他名為 backup
的命令,但你可以選擇適合的任何名稱。
第一個 if
語句是用於檢查是否提供有且只有一個引數,否則,它會用 echo
命令來列印出正確的用法。
elif
語句是用於檢查提供的引數所指向的是一個檔案,如果是的話,它會用第二個 echo
命令來列印所需的 cp
的命令(所有的選項都是用全稱來表示)並且執行它。
如果所提供的引數不是一個檔案,檔案中的第三個 echo
用於列印錯誤資訊。
在我的家目錄下,如果我執行 backup
這個命令,我可以發現目錄下多了一個檔名為checkCounts.sql.~1~
的檔案,如果我再執行一次,便又多了另一個名為 checkCounts.sql.~2~
的檔案。
成功了!就像所想的一樣,我可以繼續編輯 checkCounts.sql
,但如果我可以經常地用這個命令來為檔案製作快照的話,我可以在我遇到問題的時候回退到最近的版本。
也許在未來的某個時間,使用 git
作為版本控制系統會是一個好主意。但像上文所介紹的 backup
這個簡單而又好用的工具,是你在需要使用快照的功能時卻還未準備好使用 git
的最好工具。
結論
在我的上一篇文章裡,我保證我會透過使用指令碼,shell 裡的函式以及別名功能來簡化一些機械性的動作來提高生產效率。
在這篇文章裡,我已經展示瞭如何在使用 cp
命令同步或者備份檔案時運用 shell 函式以及別名功能來簡化操作。如果你想要了解更多,可以讀一下這兩篇文章:怎樣透過使用命令別名功能來減少敲擊鍵盤的次數 以及由我的同事 Greg 和 Seth 寫的 Shell 程式設計:shift 方法和自定義函式介紹。
via: https://opensource.com/article/18/1/two-great-uses-cp-command-update
作者:Chris Hermansen 譯者:zyk2290 校對:wxy
相關文章
- 兩個高效的cp 命令用法!
- cp 命令兩個高效的用法
- linux 的cp命令Linux
- CP命令
- asmcmd的cp命令小bugASM
- FutureTask的用法及兩種常用的使用場景
- Linux命令—–CP命令Linux
- linux中cp複製時處理軟連結的兩種方式Linux
- 深究cp拷貝資料夾時`/`的用法
- sklearn中train_test_splite的兩種用法AI
- 絕佳的API設計祕訣 - DZone整合API
- 絕佳的API設計秘訣 - DZone整合API
- 奧美:11 個創造絕佳 UX 的方法UX
- Linux cp命令Linux
- 【ASM】ASMCMD cp 命令ASM
- Android:layout_weight屬性的兩種用法Android
- Linux命令列:cURL的十種常見用法Linux命令列
- 學BOM,此文是絕佳資料!
- Eclipse中SVN的安裝步驟(兩種)和用法Eclipse
- 人力資源RPA機器人,HR的絕佳助手機器人
- Redis Desktop Manager for Mac:提升Redis管理效率的絕 佳工具RedisMac
- 改善網頁設計的10個絕佳SEO建議網頁
- python執行linux命令的兩種方法PythonLinux
- 【命令】usemod 的用法
- MongoDB三種聚合命令用法介紹MongoDB
- wget命令8種實用用法wget
- Linux基礎命令---cpLinux
- Linux命令 --- cp與scpLinux
- aix基本命令之 cpAI
- DOS命令之Date命令的用法
- MySQL防止delete命令刪除資料的兩種方法MySqldelete
- Windows從命令列建立文字檔案的兩種方式Windows命令列
- struct的一種用法Struct
- [轉自LINUXEDEN]shell入門絕佳!(三)Linux
- [轉自LINUXEDEN]shell入門絕佳!(二)Linux
- [轉自LINUXEDEN]shell入門絕佳!(一)Linux
- 絕不要用的 Linux 命令!Linux
- 絕不要用的 Linux 命令 !Linux