shell 提取文件名和目錄名的方法實(shí)現(xiàn)
在寫(xiě)shell腳本中,經(jīng)常會(huì)有需要對(duì)路徑和文件名做處理。有時(shí)候犯不著用sed命令來(lái)操作。bash提供的變量操作和一些外部命令都能很好的處理。
一、使用變量操作符 ${}
1、${var##*/}
該方式是從左開(kāi)始最大化匹配到字符"/",然后截掉左邊內(nèi)容(包括字符"/"),返回余下右側(cè)部分。
$ var=/dir1/dir2/file.txt $ echo ${var##*/} file.txt
在shell腳本中,可以使用變量來(lái)保存這個(gè)結(jié)果,再加以利用,如file=${var##*/}
我們將"/" 換成"."
$ var=/dir1/dir2/file.txt $ echo ${var##*.} txt
這樣就能提取到文件后綴了。
如果文件的后綴不僅有一個(gè),例如,file.tar.gz,命令${var##*.}僅能提取最后一個(gè)后綴,而我想提取tar.gz時(shí)該怎么辦?那么就要用下面所說(shuō)的${var#*.}命令了。
2、${var#*.}
該方式是從左開(kāi)始第一次匹配到字符".",然后截掉左邊內(nèi)容(包括字符"."),返回余下右側(cè)部分。
$ var=/dir1/dir2/file.tar.gz $ echo ${var#*.} tar.gz
這樣就可以提取出文件的多個(gè)后綴。但是要注意,之前的路徑名中不能含有字符"."。如果含有的話,讀者朋友也應(yīng)該知道該如何處理啦。
3、${var%/*}
該方式是從右開(kāi)始第一次匹配到字符"/",然后截掉右邊內(nèi)容(包括字符"/"),返回余下左側(cè)部分。
$ var=/dir1/dir2/file.txt $ echo ${var%%/*} /dir1/dir2
這樣可以提取出我們需要的文件所在的路徑
4、${var%%.*}
該方式是從右開(kāi)始最大化匹配到字符".",然后截掉右邊內(nèi)容(包括字符"."),返回余下左側(cè)部分。這里就不舉例說(shuō)明了。
方法一總結(jié)
bash提供的變量操作方法很多,不過(guò)這四個(gè)對(duì)于字符串截取基本夠用了。
有一個(gè)方便記憶的方法,我們看鍵盤(pán),"#"在"%"的左邊,當(dāng)使用#的時(shí)候,就說(shuō)明截掉左邊的內(nèi)容,反之%就是從右邊開(kāi)始截掉。而##和%%就是最大化的截掉。
*:表示要?jiǎng)h除的內(nèi)容,另外還需要一個(gè)字符表示戒掉點(diǎn)。
例如:${var%%x*}表示找出從右側(cè)開(kāi)始最大化的查找到字符"x",并刪除字符x及其右邊的字符。
二、basename和dirname
basename和dirname命令是專門(mén)用來(lái)截取文件名和路徑名的。
1、basename
該命令的作用提取文件名,使用方法為basename NAME [SUFFIX]。
1)從路徑中提出出文件名(帶后綴),例子如下:
$ var=/dir1/dir2/file.txt $ echo $(basename ${var}) file.txt
2)從上面命令的用法中可以看到,后綴(SUFFIX)是一個(gè)可選項(xiàng)。所以,若只想提取出文件名file,而不帶有后綴,還可以在變量的后面加上后綴名,例子如下:
$ var=/dir1/dir2/file.txt $ echo $(basename ${var} .txt) file
2、dirname
該命令的作用是從路徑中提取出路徑名,使用方法為 dirname NAME
使用例子如下:
$ var=/dir1/dir2/file.txt $ echo $(dirname ${var}) /dir1/dir2
這樣就提取出了file.txt文件所在的路徑。
注意:該命令不僅能提取出普通文件所在目錄,它能提取出任何文件所在的目錄,例如目錄所在的目錄,如下:
$ var=/dir1/dir2/ $ echo $(dirname ${var}) /dir1
它提取出了目錄dir2所在的目錄dir1,所以在使用中要注意到這一點(diǎn)。
到此這篇關(guān)于shell 提取文件名和目錄名的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)shell 提取文件名和目錄名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux系統(tǒng)mysql自動(dòng)備份并使用ftp上傳的方法
這篇文章主要介紹了linux系統(tǒng)自動(dòng)導(dǎo)出mysql備份,并上傳到指定ftp,還可以刪除舊的備份文件,大家參考使用吧2014-01-01關(guān)于shell的幾個(gè)不為人知卻十分有用的命令分享
這篇文章主要介紹了關(guān)于shell的幾個(gè)不為人知卻十分有用的命令,需要的朋友可以參考下2016-03-03Shell腳本自動(dòng)備份MySQL到FTP并定期清理過(guò)期備份
這篇文章主要介紹了Shell腳本自動(dòng)備份MySQL到FTP并定期清理過(guò)期備份,本文中的腳本同時(shí)實(shí)現(xiàn)了定期清理舊備份數(shù)據(jù)的功能,這是一大特色,需要的朋友可以參考下2014-12-12script_tool_for_linux.bash: Linux 環(huán)境下的 hosts 一鍵部署腳本
這篇文章主要介紹了script_tool_for_linux.bash: Linux 環(huán)境下的 hosts 一鍵部署腳本,需要的朋友可以參考下2016-04-04linux shell 管道命令(pipe)使用及與shell重定向區(qū)別
這篇文章主要介紹了linux shell 管道命令(pipe)使用及與shell重定向區(qū)別,需要的朋友可以參考下2015-10-10