使用bash / regex重命名文件?

时间:2016-02-25 11:03:53

标签: regex bash

我的文件名为:

test-12.5.0_567-release.apk

我希望它们看起来像:

test-release.apk

我意识到我可以用bash做到这一点:

for file in *release.apk; do
  mv "$file" "`basename $file SOMETHING`NEW_FILE_NAME"; done

我猜需要一些正则表达式吗?它看起来怎么样?

谢谢!

4 个答案:

答案 0 :(得分:4)

你可以这样做:

for file in *release.apk; do
  mv "$file" "${file/-*-/-}"
done

答案 1 :(得分:0)

或者你可以使用它:

for file in *release.apk; do
    mv "$file" "${file%-*-*}-release.apk"

我删除-12.5.0_567-release.apk,然后添加-release.apk

然而,恕我直言anubhava's solution看起来更好,因为它更准确地做你想要的。

答案 2 :(得分:0)

另一种选择,具有实际的正则表达式和捕获组。它使用=~运算符和BASH_REMATCH数组(包含捕获的子组)

for file in *; do
  # check if the filename matches the regex and extract 2 groups
  if [[ $file =~ ([^-]*-).*-([^-]*) ]]; then
    # use the captured groups
    mv "$file" "${BASH_REMATCH[1]}${BASH_REMATCH[2]}";
  fi
done

答案 3 :(得分:0)

您可以使用带有rename命令的正则表达式:

rename 's/-*-/-/g' *release.apk