Linux shell 之 提取檔名和目錄名的一些方法總結

高洛峰
發布: 2023-03-05 14:54:01
原創
2552 人瀏覽過

很多時候在使用Linux的shell時,我們都需要對檔案名稱或目錄名進行處理,通常的操作是由路徑中提取出檔案名,從路徑中提取目錄名,提取檔案後綴名等等。例如,從路徑/dir1/dir2/file.txt中提取也檔案名稱file.txt,提取出目錄/dir1/dir2,提取出檔案後綴txt等。

下面介紹兩種常用的方法來進行相關的操作。

一、使用${}

1、${var##*/}
該指令的作用是去掉變數var從左邊算起的最後一個'/'字元及其左邊的內容,傳回從左邊算起的最後一個'/'(不含該字符)的右邊的內容。使用範例及結果如下:

Linux shell 之 提取文件名和目录名的一些方法总结

從運行結果可以看到,使用該指令,可以提取我們需要的檔案名稱file.txt。

若使用時在shell程式檔案中,可以使用變數來保存這個結果,再加以利用,如file=${var##*/}

2、${var##*.}

該指令的作用是去掉變數var從左邊算起的最後一個'.'字元及其左邊的內容,傳回從左邊算起的最後一個'.'(不含該字元)的右邊的內容。使用範例及結果如下:

Linux shell 之 提取文件名和目录名的一些方法总结

從運行結果可以看到,使用該命令,可以提取我們需要的文件後綴。

如果檔案的後綴不僅有一個,例如,file.tar.gz,命令${var##*.}僅能提取最後一個後綴,而我想提取tar.gz時該怎麼辦?那麼就要用下面所說的${var#*.}指令了。

3、${var#*.}

該命令的作用是去掉變數var從左邊算起的第一個'.'字符及其左邊的內容,返回從左邊算起第一個'. '(不含該字元)的右邊部分的內容。使用範例及結果如下:

Linux shell 之 提取文件名和目录名的一些方法总结

從運行結果可以看到,使用該指令,可以提取出檔案的多個後綴。

4、${var%/*}

該命令的使用是去掉變數var從右邊算起的第一個'/'字符及其右邊的內容,返回從右邊算起的第一個' /'(不含該字元)的左邊的內容。使用範例及結果如下:

Linux shell 之 提取文件名和目录名的一些方法总结

從運行的結果可以看到,使用該命令,可以提取出我們需要的文件所在的目錄

該命令的使用是去掉變數var從右邊算起的最後一個'.'字元及其右邊的內容,傳回從右邊算起的最後一個'.'(不含該字元)的左邊的內容。使用範例及結果如下:


當我們需要建立一個與檔案名稱相同名字(沒有字尾)的目錄與對應的檔案相對應時,就可以使用該指令來進行操作。例如,解壓縮檔案的情況就與此類似,我們壓縮檔案file.zip時,會在與file.zip同級目錄下建立名為file的目錄。

Linux shell 之 提取文件名和目录名的一些方法总结6、${}總結

其實${}並不是專門為提取文件名或目錄名的,它的使用是變量的提取和替換等等操作,它可以提取非常多的內容,並不一定是上面五個例子中的'/'或'.'。也就是說,上面的使用方法只是它所使用的特例。


看到上面的這些指令,可能會讓人感到非常難以理解和記憶,其實不然,它們都是有規律的。

#:表示從左邊算起第一個


%:表示從右邊算起第一個


##:表示從左邊算起最後一個


%%:從右邊開始表示從右邊開始最後一個


換句話說,#總是表示左邊算起,%總是表示右邊算起。

*:表示要刪除的內容,對於#和##的情況,它位於指定的字符(例子中的'/'和'.')的左邊,表於刪除指定字符及其左邊的內容;對於%和%%的情況,它位於指定的字元(例子中的'/'和'.')的右邊,表示刪除指定字元及其右邊的內容。這裡的'*'的位置不能互換,即不能把*號放在#或##的右邊,反之亦然。

例如:${var%%x*}表示找出從右邊算起最後一個字元x,並刪除字元x及其右邊的字元。

看到這裡,就可以知道,其實該指令的用途非常廣泛,上面只是指標檔名和目錄名的命名特性來進行提取的一些特例而已。

二、basename和dirname

${}並不是專門為提取檔案名稱和目錄名稱設計的指令,那麼basename和dirname指令就是專門為做這件事而已準備的了。

1、basename

此指令的作用是從路徑中提取出檔案名,使用方法為basename NAME [SUFFIX]。

1)從路徑中提出出檔案名稱(帶後綴),例子如下:

Linux shell 之 提取文件名和目录名的一些方法总结

2)從上面命令的用法中可以看到,後綴(SUFFIX)是一個可選項。所以,若只想提取出檔名file,而不帶有後綴,還可以在變數的後面加上後綴名,例子如下:

Linux shell 之 提取文件名和目录名的一些方法总结

2、dirname

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

使用範例如下:

Linux shell 之 提取文件名和目录名的一些方法总结

這樣就提取了file.txt檔案所在的目錄。

註:該指令不僅能提取出普通文件所的目錄,它能提取出任何文件所在的目錄,例如目錄所在的目錄,如下:

Linux shell 之 提取文件名和目录名的一些方法总结

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

更多Linux shell 之 提取檔名和目錄名的一些方法總結相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!