很多時候在使用Linux的shell時瞄摊,我們都需要對文件名或目錄名進(jìn)行處理箱季,通常的操作是由路徑中提取出文件名赂鲤,從路徑中提取出目錄名噪径,提取文件后綴名等等。例如数初,從路徑/dir1/dir2/file.txt中提取也文件名file.txt找爱,提取出目錄/dir1/dir2,提取出文件后綴txt等泡孩。
下面介紹兩種常用的方法來進(jìn)行相關(guān)的操作车摄。
一、使用{var##*/}
該命令的作用是去掉變量var從左邊算起的最后一個'/'字符及其左邊的內(nèi)容吮播,返回從左邊算起的最后一個'/'(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:
從運行結(jié)果可以看到眼俊,使用該命令意狠,可以提取出我們需要的文件名file.txt。
若使用時在shell程序文件中疮胖,可以使用變量來保存這個結(jié)果环戈,再加以利用,如file=${var##*/}
2澎灸、${var##*.}
該命令的作用是去掉變量var從左邊算起的最后一個'.'字符及其左邊的內(nèi)容院塞,返回從左邊算起的最后一個'.'(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:
從運行結(jié)果可以看到性昭,使用該命令拦止,可以提取出我們需要的文件后綴。
如果文件的后綴不僅有一個糜颠,例如汹族,file.tar.gz艺玲,命令{var#*.}命令了饭聚。
3、${var#*.}
該命令的作用是去掉變量var從左邊算起的第一個'.'字符及其左邊的內(nèi)容搁拙,返回從左邊算起第一個'.'(不含該字符)的右邊部分的內(nèi)容秒梳。使用例子及結(jié)果如下:
從運行結(jié)果可以看到,使用該命令箕速,可以提取出文件的多個后綴酪碘。
4、${var%/*}
該命令的使用是去掉變量var從右邊算起的第一個'/'字符及其右邊的內(nèi)容盐茎,返回從右邊算起的第一個'/'(不含該字符)的左邊的內(nèi)容兴垦。使用例子及結(jié)果如下:
從運行的結(jié)果可以看到,使用該命令字柠,可以提取出我們需要的文件所在的目錄
5探越、${var%%.*}
該命令的使用是去掉變量var從右邊算起的最后一個'.'字符及其右邊的內(nèi)容,返回從右邊算起的最后一個'.'(不含該字符)的左邊的內(nèi)容窑业。使用例子及結(jié)果如下:
當(dāng)我們需要建立一個與文件名相同名字(沒有后綴)的目錄與對應(yīng)的文件相對應(yīng)時钦幔,就可以使用該命令來進(jìn)行操作。例如常柄,解壓文件的情況就與此類似鲤氢,我們壓縮文件file.zip時,會在與file.zip同級目錄下建立一個名為file的目錄西潘。
6卷玉、{}并不是專門為提取文件名或目錄名的,它的使用是變量的提取和替換等等操作喷市,它可以提取非常多的內(nèi)容相种,并不一定是上面五個例子中的'/'或'.'。也就是說东抹,上面的使用方法只是它使用的一個特例蚂子。
看到上面的這些命令,可能會讓人感到非常難以理解和記憶缭黔,其實不然食茎,它們都是有規(guī)律的膘婶。
:表示從左邊算起第一個
%:表示從右邊算起第一個
:表示從左邊算起最后一個
%%:表示從右邊算起最后一個
換句話來說表锻,#總是表示左邊算起匾灶,%總是表示右邊算起。
*:表示要刪除的內(nèi)容哎媚,對于#和##的情況喇伯,它位于指定的字符(例子中的'/'和'.')的左邊,表于刪除指定字符及其左邊的內(nèi)容拨与;對于%和%%的情況稻据,它位于指定的字符(例子中的'/'和'.')的右邊,表示刪除指定字符及其右邊的內(nèi)容买喧。這里的''的位置不能互換捻悯,即不能把號放在#或##的右邊,反之亦然淤毛。
例如:${var%%x*}表示找出從右邊算起最后一個字符x今缚,并刪除字符x及其右邊的字符。
看到這里低淡,就可以知道姓言,其實該命令的用途非常廣泛,上面只是指針文件名和目錄名的命名特性來進(jìn)行提取的一些特例而已蔗蹋。
二何荚、basename和dirname
${}并不是專門為提取文件名和目錄名設(shè)計的命令,那么basename和dirname命令就是專門為做這一件事而已準(zhǔn)備的了纸颜。
1兽泣、basename
該命令的作用是從路徑中提取出文件名绎橘,使用方法為basename NAME [SUFFIX]胁孙。
1)從路徑中提出出文件名(帶后綴),例子如下:
2)從上面命令的用法中可以看到称鳞,后綴(SUFFIX)是一個可選項涮较。所以,若只想提取出文件名file冈止,而不帶有后綴狂票,還可以在變量的后面加上后綴名,例子如下:
2熙暴、dirname
該命令的作用是從路徑中提取出目錄名闺属,使用方法為 dirname NAME
使用例子如下:
這樣就提取出了file.txt文件所在的目錄。
注:該命令不僅能提取出普通文件所的目錄周霉,它能提取出任何文件所在的目錄掂器,例如目錄所在的目錄,如下:
它提取出了目錄dir2所在的目錄dir1.
————————————————
版權(quán)聲明:本文為CSDN博主「ljianhui」的原創(chuàng)文章俱箱,遵循CC 4.0 BY-SA版權(quán)協(xié)議国瓮,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ljianhui/java/article/details/43128465