我有名为:
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