在 Linux Bash 中使用 basename 命令
Yahya Irmak
2023年1月30日
Bash
Bash Command
有時,在 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)使用單個雜湊。
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Yahya Irmak
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn