Linux shell 之 提取文件名和目錄名的一些方法

很多時(shí)候在使用Linux的shell時(shí),我們都需要對(duì)文件名或目錄名進(jìn)行處理,通常的操作是由路徑中提取出文件名呛牲,從路徑中提取出目錄名,提取文件后綴名等等驮配。例如娘扩,從路徑/dir1/dir2/file.txt中提取也文件名file.txt着茸,提取出目錄/dir1/dir2,提取出文件后綴txt等琐旁。

下面介紹兩種常用的方法來進(jìn)行相關(guān)的操作涮阔。

一、使用${}

1灰殴、${var##*/}

該命令的作用是去掉變量var從左邊算起的最后一個(gè)'/'字符及其左邊的內(nèi)容敬特,返回從左邊算起的最后一個(gè)'/'(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:

從運(yùn)行結(jié)果可以看到牺陶,使用該命令伟阔,可以提取出我們需要的文件名file.txt。

若使用時(shí)在shell程序文件中掰伸,可以使用變量來保存這個(gè)結(jié)果皱炉,再加以利用,如file=${var##*/}

2狮鸭、${var##*.}

該命令的作用是去掉變量var從左邊算起的最后一個(gè)'.'字符及其左邊的內(nèi)容合搅,返回從左邊算起的最后一個(gè)'.'(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:

從運(yùn)行結(jié)果可以看到歧蕉,使用該命令灾部,可以提取出我們需要的文件后綴。

如果文件的后綴不僅有一個(gè)廊谓,例如梳猪,file.tar.gz,命令${var##*.}僅能提取最后一個(gè)后綴蒸痹,而我想提取tar.gz時(shí)該怎么辦春弥?那么就要用下面所說的${var#*.}命令了。

3叠荠、${var#*.}

該命令的作用是去掉變量var從左邊算起的第一個(gè)'.'字符及其左邊的內(nèi)容匿沛,返回從左邊算起第一個(gè)'.'(不含該字符)的右邊部分的內(nèi)容。使用例子及結(jié)果如下:

從運(yùn)行結(jié)果可以看到榛鼎,使用該命令逃呼,可以提取出文件的多個(gè)后綴。

4者娱、${var%/*}

該命令的使用是去掉變量var從右邊算起的第一個(gè)'/'字符及其右邊的內(nèi)容抡笼,返回從右邊算起的第一個(gè)'/'(不含該字符)的左邊的內(nèi)容。使用例子及結(jié)果如下:

從運(yùn)行的結(jié)果可以看到黄鳍,使用該命令推姻,可以提取出我們需要的文件所在的目錄

5、${var%%.*}

該命令的使用是去掉變量var從右邊算起的最后一個(gè)'.'字符及其右邊的內(nèi)容框沟,返回從右邊算起的最后一個(gè)'.'(不含該字符)的左邊的內(nèi)容藏古。使用例子及結(jié)果如下:

當(dāng)我們需要建立一個(gè)與文件名相同名字(沒有后綴)的目錄與對(duì)應(yīng)的文件相對(duì)應(yīng)時(shí)增炭,就可以使用該命令來進(jìn)行操作。例如拧晕,解壓文件的情況就與此類似隙姿,我們壓縮文件file.zip時(shí),會(huì)在與file.zip同級(jí)目錄下建立一個(gè)名為file的目錄厂捞。

6输玷、${}總結(jié)

其實(shí)${}并不是專門為提取文件名或目錄名的,它的使用是變量的提取和替換等等操作蔫敲,它可以提取非常多的內(nèi)容饲嗽,并不一定是上面五個(gè)例子中的'/'或'.'。也就是說奈嘿,上面的使用方法只是它使用的一個(gè)特例。

看到上面的這些命令吞加,可能會(huì)讓人感到非常難以理解和記憶裙犹,其實(shí)不然,它們都是有規(guī)律的衔憨。

#:表示從左邊算起第一個(gè)

%:表示從右邊算起第一個(gè)

##:表示從左邊算起最后一個(gè)

%%:表示從右邊算起最后一個(gè)

換句話來說叶圃,#總是表示左邊算起践图,%總是表示右邊算起掺冠。

*:表示要?jiǎng)h除的內(nèi)容,對(duì)于#和##的情況码党,它位于指定的字符(例子中的'/'和'.')的左邊德崭,表于刪除指定字符及其左邊的內(nèi)容;對(duì)于%和%%的情況揖盘,它位于指定的字符(例子中的'/'和'.')的右邊眉厨,表示刪除指定字符及其右邊的內(nèi)容。這里的'*'的位置不能互換兽狭,即不能把*號(hào)放在#或##的右邊憾股,反之亦然。

例如:${var%%x*}表示找出從右邊算起最后一個(gè)字符x箕慧,并刪除字符x及其右邊的字符服球。

看到這里,就可以知道颠焦,其實(shí)該命令的用途非常廣泛斩熊,上面只是指針文件名和目錄名的命名特性來進(jìn)行提取的一些特例而已。

二蒸健、basename和dirname

${}并不是專門為提取文件名和目錄名設(shè)計(jì)的命令座享,那么basename和dirname命令就是專門為做這一件事而已準(zhǔn)備的了婉商。

1、basename

該命令的作用是從路徑中提取出文件名渣叛,使用方法為basename NAME [SUFFIX]丈秩。

1)從路徑中提出出文件名(帶后綴),例子如下:

2)從上面命令的用法中可以看到淳衙,后綴(SUFFIX)是一個(gè)可選項(xiàng)蘑秽。所以,若只想提取出文件名file箫攀,而不帶有后綴肠牲,還可以在變量的后面加上后綴名,例子如下:

2靴跛、dirname

該命令的作用是從路徑中提取出目錄名缀雳,使用方法為 dirname NAME

使用例子如下:

這樣就提取出了file.txt文件所在的目錄。

注:該命令不僅能提取出普通文件所的目錄梢睛,它能提取出任何文件所在的目錄肥印,例如目錄所在的目錄,如下:

它提取出了目錄dir2所在的目錄dir1.

---------------------

作者:ljianhui

來源:CSDN

原文:https://blog.csdn.net/ljianhui/article/details/43128465

版權(quán)聲明:本文為博主原創(chuàng)文章绝葡,轉(zhuǎn)載請(qǐng)附上博文鏈接深碱!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市藏畅,隨后出現(xiàn)的幾起案子敷硅,更是在濱河造成了極大的恐慌,老刑警劉巖愉阎,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绞蹦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诫硕,警方通過查閱死者的電腦和手機(jī)坦辟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來章办,“玉大人锉走,你說我怎么就攤上這事∨航欤” “怎么了挪蹭?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)休偶。 經(jīng)常有香客問我梁厉,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任词顾,我火速辦了婚禮八秃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肉盹。我一直安慰自己昔驱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布上忍。 她就那樣靜靜地躺著骤肛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窍蓝。 梳的紋絲不亂的頭發(fā)上腋颠,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音吓笙,去河邊找鬼淑玫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛面睛,可吹牛的內(nèi)容都是我干的混移。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侮穿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了毁嗦?” 一聲冷哼從身側(cè)響起亲茅,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狗准,沒想到半個(gè)月后克锣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腔长,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年袭祟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捞附。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巾乳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟召,到底是詐尸還是另有隱情胆绊,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布欧募,位于F島的核電站压状,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跟继。R本人自食惡果不足惜种冬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一镣丑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娱两,春花似錦莺匠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纪挎,卻和暖如春期贫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背异袄。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工通砍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烤蜕。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓封孙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讽营。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虎忌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容