使用 bash/regex 重命名文件



我有名为:

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

我猜它需要一些正则表达式?会是什么样子?

谢谢!

你可以做:

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

您可以使用它:

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

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

但是,恕我直言,anubhava的解决方案看起来更好,因为它可以更精确地做您想要的事情。

另一种选择,具有实际的正则表达式和捕获组。它使用 =~ 运算符和 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

您可以将正则表达式与 rename 命令一起使用:

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

最新更新