在bash中,如何在没有带参数替换的最终扩展名的情况下获取文件名?

时间:2012-11-12 22:50:46

标签: bash

我正在遍历目录中的所有*.info文件,并检查是否存在相应的*.gz文件(如果没有,则删除.info文件)。但要做到这一点,我需要从.info剥离$file。我已经在bash中摆弄了参数替换,但似乎没有任何效果。我可以很容易地获得扩展(如下面的代码所示)但不是扩展名。我尝试过各种我预期可能有用的东西;没有。

for file in *.info; do
  gz_file="${file:(-4)}"                        # wrong... what is right?
  # gz_file=`echo "$file" | sed -e 's/.info//'` # easy alternative I'm trying to avoid
  if [[ ! -f "${gz_file}" ]]; then
    rm "${file}"
  fi
done

我意识到这可以通过sed轻松完成,如注释掉的行所示,但我想用bash中内置的变量操作功能来做,如果可能的话,因为我认为找出如何让它以这种方式工作会很方便。

2 个答案:

答案 0 :(得分:2)

你试过${file%.*}吗? 这应该删除扩展名。

答案 1 :(得分:1)

$ x=/foo/bar.info
$ echo ${x%.info}
/foo/bar
$