shell獲取檔名和目錄名

2022-06-06 18:03:11 字數 2612 閱讀 7629

憬薇15940人閱讀

2018-08-23 21:23:31

對檔名或目錄名進行處理,通常的操作是由路徑中提取出檔名,從路徑中提取出目錄名,提取檔案字尾名等等。例如,從路徑/dir1/dir2/file.txt中提取也檔名file.txt,提取出目錄/dir1/dir2,提取出檔案字尾txt等。 

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

一、使用shell正規表示式 ${}

1、$

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

從執行結果可以看到,使用該命令,可以提取出我們需要的檔名file.txt。

若使用時在shell程式檔案中,可以使用變數來儲存這個結果,再加以利用,如file=$

2、$

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

從執行結果可以看到,使用該命令,可以提取出我們需要的檔案字尾。

如果檔案的字尾不僅有乙個,例如,file.tar.gz,命令$僅能提取最後乙個字尾,而我想提取tar.gz時該怎麼辦?那麼就要用下面所說的$命令了。

3、$

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

從執行結果可以看到,使用該命令,可以提取出檔案的多個字尾。

4、$

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

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

5、$

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

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

6、${}總結

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

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

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

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

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

%%:表示從右邊算起最後乙個

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

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

例如:$表示找出從右邊算起最後乙個字元x,並刪除字元x及其右邊的字元。

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

二、使用shell命令 basename dirname realpath

${}只是shell的正規表示式,用字串的方式處理檔案絕對路徑獲取檔案的路徑和檔名;basename dirname realpath 這仨命令就專門獲取檔案資訊的。

1、basename

該命令的作用是從路徑中提取出檔名,使用方法為basename name [suffix]。

1)從路徑中提出出檔名(帶字尾),例子如下:

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

2、dirname

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

使用例子如下:

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

注:該命令不僅能提取出普通檔案所的目錄,它能提取出任何檔案所在的目錄,例如目錄所在的目錄,如下:

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

3、realpath 上面兩個命令的結合體:

相對路徑輸出絕對路徑

shell提取檔名和目錄名

用於字串的讀取,提取和替換功能,可以使用 提取字串1.提取檔名 root localhost test var mnt aaa test test.txt root localhost test echo test.txt2.提取字尾 root localhost test echo txt3.提取...

shell 提取檔名和目錄名

在寫shell指令碼中,經常會有需要對路徑和檔名做處理。有時候犯不著用sed命令來操作。bash提供的變數操作和一些外部命令都能很好的處理。var dir1 dir2 file.txt echo file.txt 在shell指令碼中,可以使用變數來儲存這個結果,再加以利用,如file 我們將 換成...

Linux shell 提取檔名和目錄名

用於字串的讀取,提取和替換功能,可以使用 提取字串 1 提取檔名 root localhost log var dir1 dir2 file.txt root localhost log echo file.txt 2 提取字尾 root localhost log echo txt3 提取不帶字尾...