为了账号安全,请及时绑定邮箱和手机立即绑定

在Bash中提取文件名和扩展名

在Bash中提取文件名和扩展名

qq_笑_17 2019-06-03 10:22:13
在Bash中提取文件名和扩展名我想分别获得文件名(没有扩展名)和扩展名。到目前为止,我找到的最好的解决办法是:NAME=`echo "$FILE" | cut -d'.' -f1`EXTENSION=`echo "$FILE" | cut -d'.' -f2`这是错误的,因为如果文件名包含多个.人物。如果,比方说,我有a.b.js,它会考虑a和b.js,而不是a.b和js.它可以很容易地用Python实现file, ext = os.path.splitext(path)但是,如果可能的话,我不希望只为此启动Python解释器。有更好的主意吗?
查看完整描述

4 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

首先,获取没有路径的文件名:

filename=$(basename -- "$fullfile")extension="${filename##*.}"filename="${filename%.*}"

或者,您可以将注意力集中在路径的最后一个“/”上,而不是“。”即使您有不可预测的文件扩展名,它也可以工作:

filename="${fullfile##*/}"

您可能需要查看文档:

  • 在网页上“

    3.5.3壳体参数扩展"

  • 在bash手册中称为“参数展开”的部分。


查看完整回答
反对 回复 2019-06-03
?
湖上湖

TA贡献2003条经验 获得超2个赞

~% FILE="example.tar.gz"

~% echo "${FILE%%.*}"

example

~% echo "${FILE%.*}"

example.tar

~% echo "${FILE#*.}"

tar.gz

~% echo "${FILE##*.}"

gz


查看完整回答
反对 回复 2019-06-03
?
HUWWW

TA贡献1874条经验 获得超12个赞

通常您已经知道扩展,所以您可能希望使用:

basename filename .extension

例如:

basename /path/to/dir/filename.txt .txt

我们得到

filename


查看完整回答
反对 回复 2019-06-03
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您可以使用POSIX变量的魔力:

bash-3.2$ FILENAME=somefile.tar.gz
bash-3.2$ echo ${FILENAME%%.*}somefile
bash-3.2$ echo ${FILENAME%.*}somefile.tar

如果你的文件名是./somefile.tar.gz然后echo ${FILENAME%%.*}将贪婪地删除与.你就会有一根空的绳子。

(您可以使用一个临时变量来解决这个问题:

FULL_FILENAME=$FILENAME
FILENAME=${FULL_FILENAME##*/}echo ${FILENAME%%.*}

)


这,这个立地解释更多。

${variable%pattern}
  Trim the shortest match from the end
${variable##pattern}
  Trim the longest match from the beginning
${variable%%pattern}
  Trim the longest match from the end
${variable#pattern}
  Trim the shortest match from the beginning


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 1099 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信