在 bash/zsh 中从文件名剥离扩展名

问题:

你在 Linux shell 中有一个文件名,想从中剥离/移除文件名扩展名 - 例如如果你有 myarchive.zip,你想只得到 myarchive 作为输出。

解决方案

假设你的原始文件名保存在 bash 变量 $filename 中。然后你可以使用以下命令:

stripext.sh
echo $filename | rev | cut -d. -f2- | rev

为什么这有效:

我们需要使用 cut 和 rev 的组合,因为 cut 不支持"只移除最后一个字段"之类的东西,除非你知道字段数量(你通常不知道,除非你不想支持像 my.archive.zip 这样的文件名)。

rev 反转文件名 - 例如如果 $filenamemyarchive.ziprev $filename 产生 piz.evihcraym cut -d. -f2 只移除输入字符串中以".“分隔的第一个字段 - 因为字符串被反转了,这等同于只移除原始输入的最后一个字段

之后我们需要再次 _rev_erse cut 的输出以获得期望的结果


Check out similar posts by category: Shell