如何确定文件名在Unix中是否有任何扩展名?

时间:2012-05-27 11:58:28

标签: file unix sh file-extension

我需要查明文件或目录名是否包含Unix中用于Bourne shell脚本的任何扩展名。

逻辑将是:

  1. 如果有文件扩展名
  2. 删除扩展程序
  3. 并使用不带扩展名的文件名
  4. 这是我在SO中的第一个问题,所以很高兴听到某人的意见。

2 个答案:

答案 0 :(得分:4)

扩展的概念并不像传统/玩具DOS 8 + 3文件名那样严格定义。如果要查找包含点不是第一个字符的点的文件名,请尝试此操作。

case $filename in
    [!.]*.*) filename=${filename%.*};;
esac

如果有$filename,这将修改扩展(根据上面的定义,从最后一个点开始,如果有几个),否则没有任何内容。

如果您不处理名称可能以点开头的文件,则case是多余的,因为如果没有点,分配也不会触及该值;但是有了这个腰带和吊带的例子,你可以轻松选择你喜欢的方法,以防你需要以某种方式扩展它。

要处理有点的文件,只要它不是第一个字符(但如果第一个字符也是点也没关系),请尝试使用模式?*.*

case 表达式 in 模式 ) 命令 ;; esac语法可能看起来很奇怪或可怕,但它非常多才多艺,非常值得学习。

答案 1 :(得分:0)

我会使用shell不可知解决方案。通过以下方式运行名称:

cut -d . -f 1

将为您提供第一个点的所有内容(' -d。'设置分隔符,' -f 1'选择第一个字段)。你可以玩params(尝试' - 补充'反向选择)并获得你想要的任何东西。