繁体   English   中英

使用 bash/regex 重命名文件?

[英]Rename files using 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM