在 Linux Bash 中使用 basename 命令
Yahya Irmak
2023年1月30日
有時,在 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 has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn