3

I need to find out if a file or directory name contains any extension in Unix for a Bourne shell scripting.

The logic will be:

  1. If there is a file extension
  2. Remove the extension
  3. And use the file name without the extension

This is my first question in SO so will be great to hear from someone.

4

2 回答 2

4

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

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

如果有一个,这将修剪扩展名(根据上述定义,如果有几个,则从最后一个点开始)$filename,否则什么都没有。

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

要同时处理有点的文件,只要它不是第一个字符(但如果第一个字符也是点也可以),请尝试使用 pattern ?*.*

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

于 2012-05-27T12:08:07.953 回答
0

我会使用与外壳无关的解决方案。通过以下方式运行名称:

cut -d . -f 1

将为您提供直到第一个点的所有内容('-d .' 设置分隔符,'-f 1' 选择第一个字段)。您可以使用参数(尝试'--complement'来反向选择)并获得几乎任何您想要的东西。

于 2012-05-27T12:16:16.843 回答