2021-02-15 分類: 網(wǎng)站建設(shè)
去年七月,我寫(xiě)了一篇關(guān)于 cp 命令的兩種常見(jiàn)用法的文章:備份一個(gè)文件,以及同步一個(gè)文件夾的備份。
雖然這些工具確實(shí)很好用,但同時(shí),輸入這些命令太過(guò)于累贅了。為了解決這個(gè)問(wèn)題,我在我的 Bash 啟動(dòng)文件里創(chuàng)建了一些 Bash 快捷方式。現(xiàn)在,我想把這些捷徑分享給你們,以便于你們?cè)谛枰臅r(shí)候可以拿來(lái)用,或者是給那些還不知道怎么使用 Bash 的別名以及函數(shù)的用戶提供一些思路。
如果要使用 cp 來(lái)更新一個(gè)文件夾的副本,通常會(huì)使用到的命令是:
- cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
其中 -r 代表“向下遞歸訪問(wèn)文件夾中的所有文件”,-u 代表“更新目標(biāo)”,-v 代表“詳細(xì)模式”,SOURCE-FOLDER 是包含最新文件的文件夾的名稱,DESTINATION-DIRECTORY 是包含必須同步的SOURCE-FOLDER 副本的目錄。
因?yàn)槲医?jīng)常使用 cp 命令來(lái)復(fù)制文件夾,我會(huì)很自然地想起使用 -r 選項(xiàng)。也許再想地更深入一些,我還可以想起用 -v 選項(xiàng),如果再想得再深一層,我會(huì)想起用選項(xiàng) -u(不知道這個(gè)選項(xiàng)是代表“更新”還是“同步”還是一些什么其它的)。
或者,還可以使用Bash 的別名功能來(lái)將 cp 命令以及其后的選項(xiàng)轉(zhuǎn)換成一個(gè)更容易記憶的單詞,就像這樣:
- alias sync='cp -r -u -v'
如果我將其保存在我的主目錄中的 .bash_aliases 文件中,然后啟動(dòng)一個(gè)新的終端會(huì)話,我可以使用該別名了,例如:
- sync Pictures /media/me/4388-E5FE
可以將我的主目錄中的圖片文件夾與我的 USB 驅(qū)動(dòng)器中的相同版本同步。
不清楚 sync 是否已經(jīng)定義了?你可以在終端里輸入 alias 這個(gè)單詞來(lái)列出所有正在使用的命令別名。
喜歡嗎?想要現(xiàn)在就立即使用嗎?那就現(xiàn)在打開(kāi)終端,輸入:
- echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
然后啟動(dòng)一個(gè)新的終端窗口并在命令提示符下鍵入 alias。你應(yīng)該看到這樣的東西:
- 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 已經(jīng)定義了。
若要使用 cp 來(lái)備份一個(gè)文件,通常使用的命令是:
- cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
其中 --force 代表“強(qiáng)制制作副本”,--backup= numbered 代表“使用數(shù)字表示備份的生成”,WORKING-FILE 是我們希望保留的當(dāng)前文件,BACKED-UP-FILE 與 WORKING-FILE 的名稱相同,并附加生成信息。
我們不僅需要記得所有 cp 的選項(xiàng),我們還需要記得去重復(fù)輸入 WORKING-FILE 的名字。但當(dāng)Bash 的函數(shù)功能已經(jīng)可以幫我們做這一切,為什么我們還要不斷地重復(fù)這個(gè)過(guò)程呢?就像這樣:
再一次提醒,你可將下列內(nèi)容保存入你在家目錄下的 .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
- }
我將此函數(shù)稱之為 backup,因?yàn)槲业南到y(tǒng)上沒(méi)有任何其他名為 backup 的命令,但你可以選擇適合的任何名稱。
第一個(gè) if 語(yǔ)句是用于檢查是否提供有且只有一個(gè)參數(shù),否則,它會(huì)用 echo 命令來(lái)打印出正確的用法。
elif 語(yǔ)句是用于檢查提供的參數(shù)所指向的是一個(gè)文件,如果是的話,它會(huì)用第二個(gè) echo 命令來(lái)打印所需的 cp 的命令(所有的選項(xiàng)都是用全稱來(lái)表示)并且執(zhí)行它。
如果所提供的參數(shù)不是一個(gè)文件,文件中的第三個(gè) echo 用于打印錯(cuò)誤信息。
在我的家目錄下,如果我執(zhí)行 backup 這個(gè)命令,我可以發(fā)現(xiàn)目錄下多了一個(gè)文件名為checkCounts.sql.~1~ 的文件,如果我再執(zhí)行一次,便又多了另一個(gè)名為 checkCounts.sql.~2~ 的文件。
成功了!就像所想的一樣,我可以繼續(xù)編輯 checkCounts.sql,但如果我可以經(jīng)常地用這個(gè)命令來(lái)為文件制作快照的話,我可以在我遇到問(wèn)題的時(shí)候回退到最近的版本。
也許在未來(lái)的某個(gè)時(shí)間,使用 git 作為版本控制系統(tǒng)會(huì)是一個(gè)好主意。但像上文所介紹的 backup 這個(gè)簡(jiǎn)單而又好用的工具,是你在需要使用快照的功能時(shí)卻還未準(zhǔn)備好使用 git 的最好工具。
在我的上一篇文章里,我保證我會(huì)通過(guò)使用腳本,shell 里的函數(shù)以及別名功能來(lái)簡(jiǎn)化一些機(jī)械性的動(dòng)作來(lái)提高生產(chǎn)效率。
在這篇文章里,我已經(jīng)展示了如何在使用 cp 命令同步或者備份文件時(shí)運(yùn)用 shell 函數(shù)以及別名功能來(lái)簡(jiǎn)化操作。如果你想要了解更多,可以讀一下這兩篇文章:怎樣通過(guò)使用命令別名功能來(lái)減少敲擊鍵盤(pán)的次數(shù) 以及由我的同事 Greg 和 Seth 寫(xiě)的 Shell 編程:shift 方法和自定義函數(shù)介紹。
分享題目:兩種CP命令常見(jiàn)用法的快捷方式
地址分享:http://m.newbst.com/news/101150.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、商城網(wǎng)站、標(biāo)簽優(yōu)化、定制網(wǎng)站、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容