修改Unix文件的擴(kuò)展名
今天,我們要來學(xué)習(xí)下修改Unix文件的擴(kuò)展名的知識(shí)。如現(xiàn)在操作系統(tǒng)中某個(gè)目錄下面有很多的sh文件(Unix系統(tǒng)中的配置文件,其實(shí)跟txt相同)?,F(xiàn)在系統(tǒng)工程師需要將這些sh文件的擴(kuò)展名改掉,全部改為txt。雖然可以通過一個(gè)個(gè)的手工修改來實(shí)現(xiàn),但是處理起來的難度比較大。
如果要實(shí)現(xiàn)批量更改Unix文件擴(kuò)展名的話,則可以借助for等循環(huán)語句來實(shí)現(xiàn)。不過循環(huán)語句內(nèi)部的操作有兩種實(shí)現(xiàn)方式。一是采用expr命令。其實(shí)對(duì)Unix文件名進(jìn)行操作,說到底就是對(duì)字符串的操作。
因?yàn)閁nix文件名字也是一種字符串。如系統(tǒng)工程師可以先利用expr命令截取字符串的功能,將擴(kuò)展名前面的字符串截取出來,然后將其保存在一個(gè)變量中,如filenameshort。然后再利用系統(tǒng)的重命名或者移動(dòng)文件的命令,對(duì)系統(tǒng)進(jìn)行重命名,如$filenameshortdoc。
這就可以實(shí)現(xiàn)更改擴(kuò)展名的需求。不過筆者并不建議采用這個(gè)expr命令來完成這個(gè)需求。因?yàn)楫?dāng)Unix文件名的長(zhǎng)度不固定時(shí),這個(gè)正則表達(dá)式比價(jià)難寫。要將文件名字符串截取出來(去掉擴(kuò)展名的名字),有一定的難度。
在這里,筆者介紹另外一個(gè)命令basename命令。其實(shí)這也是一個(gè)字符串相關(guān)的處理命令。其基本格式為basename text1 text2。他的基本功能就是從第一個(gè)字符串中去掉第二個(gè)字符串的內(nèi)容。
如執(zhí)行命令basename setup.sh sh,則就表示將setup.sh這個(gè)字符串中的sh字符串去掉,變?yōu)閟etup.。那么此就可以利用這個(gè)命令來進(jìn)行成批修改擴(kuò)展名。其具體的實(shí)現(xiàn)方式跟上面類似。
只是在截取Unix文件名字符串的時(shí)候,采用了basename命令,而不是expr命令。而basename命令本身就帶有截取字符串的功能,不需要采用正則表達(dá)式。所以實(shí)現(xiàn)起來相對(duì)簡(jiǎn)單一點(diǎn)。
從這個(gè)案例中,筆者也想再次強(qiáng)調(diào)一下一個(gè)字符串處理的基本原則。即無論是截取字符串還是對(duì)字符串進(jìn)行的其他操作,如果可以通過系統(tǒng)命令+可選項(xiàng)參數(shù)來實(shí)現(xiàn)的,就采用這種實(shí)現(xiàn)方式。
如果沒有的話,需要考慮能否采用basename等不需要正則表達(dá)式的命令來實(shí)現(xiàn)。只有在以上兩種方式都不可行的情況下,才考慮使用exper命令來實(shí)現(xiàn)。這主要是因?yàn)檎齽t表達(dá)式的設(shè)計(jì)實(shí)在比較麻煩,雖然其功能比較強(qiáng)大。
利用exper來統(tǒng)計(jì)一下字符串的長(zhǎng)度還好,但是如果要實(shí)現(xiàn)一些復(fù)雜功能,如截取字符串或者確定字符的位置,就需要系統(tǒng)工程師有比較深厚的功底了。關(guān)于Unix文件的知識(shí),我們就講解到這里了。
【編輯推薦】