在 Linux Bash 中使用 basename 命令

Yahya Irmak 2023年1月30日
  1. 在 Linux Bash 中使用 basename 命令從檔名中刪除目錄
  2. 在 Linux Bash 中使用 basename 命令從檔名中刪除字尾
在 Linux Bash 中使用 basename 命令

有時,在 Bash 指令碼中,你可能想要獲取檔名,而不是整個路徑,甚至刪除檔案末尾的副檔名。

本文將解釋在 Linux Bash 中使用 basename 命令從檔名中刪除目錄和字尾。

在 Linux Bash 中使用 basename 命令從檔名中刪除目錄

basename 命令從檔名中刪除目錄。它列印檔名並刪除任何前導目錄元件。

basename 命令名稱之後,鍵入檔名。

basename /usr/bin/uname

在上面的例子中,basename 命令刪除/usr/bin 目錄並將 uname 列印到螢幕上。

從檔名中刪除目錄

你還可以使用 -a--multiple 引數提供多個檔名。該命令對每個引數執行相同的操作,並使用這些引數在新行上列印每個引數。

使用 -z--zero 引數將所有輸出寫入同一行(不是換行符)。

basename -a folder1/file1 folder2/file2
basename -az folder1/file1 folder2/file2

在此示例中,我們將首先從兩個檔名中刪除目錄並在新行上列印兩者。然後,我們將使用 -z 引數將兩者列印在同一行上。

從多個檔名中剝離目錄

在 Linux Bash 中使用 basename 命令從檔名中刪除字尾

basename 命令還會刪除檔案字尾和目錄(如果指定)。要刪除檔案的字尾,請在命令末尾鍵入要刪除的字尾。

你也可以使用 -s--suffix 引數刪除字尾。

下面的示例將刪除目錄和 .py 副檔名。

basename tools/example.py .py
basename -s .py tools/example.py

從檔名中刪除字尾

從 Linux Bash 中的檔名獲取字尾

我們可以使用下面的程式碼來獲取檔案的字尾。首先,我們使用 basename 命令剝離目錄並將其儲存在 filename 變數中。

然後,使用帶有表示式 suffix=${filename##*.} 的雙雜湊,我們得到字尾。

filename=$(basename "$1" )
suffix=${filename##*.}
echo $suffix

我們得到第一個點之後的所有副檔名,而不僅僅是最後一個字尾,對具有多個副檔名的檔案(如 .zh-tw.md)使用單個雜湊。

作者: Yahya Irmak
Yahya Irmak avatar Yahya Irmak avatar

Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.

LinkedIn

相關文章 - Bash Command