重命名所有文件使用名称模式 *.[A-Z0-9] .bundle. *,用给定的字符串替换[A-Z0-9]



在用Angular 2 CLI构建应用程序上,我得到的输出命名为:

inline.d41d8cd.bundle.js
main.6d2e2e89.bundle.js

等。

我想做的是创建一个bash脚本来重命名文件,用一些给定的通用字符串替换前两个.之间的数字。尝试了包括SED在内的一些事情,但我无法让他们上班。任何人都可以建议一个bash脚本以使此工作吗?

在纯bash regEx中使用=~变量(从bash 3.0支撑)

#!/bin/bash
string_to_replace_with="sample"
for file in *.js
do
    [[ $file =~ .([[:alnum:]]+).*$ ]] && string="${BASH_REMATCH[1]}" 
    mv -v "$file" "${file/$string/$string_to_replace_with}"
done

对于您给定的输入文件,运行脚本

$ bash script.sh
inline.d41d8cd.bundle.js -> inline.sample.bundle.js
main.6d2e2e89.bundle.js -> main.sample.bundle.js

简短,功能强大且高效:

使用此(perl)工具。并使用 perl正则表达式

rename 's/.X{4,8}./.myString./' *.js

rename 's/.X+./.myString./' *.js

纯弹药选项:

shopt -s extglob    # so *(...) will work
generic_string="foo"   # or whatever else you want between the dots
for f in *.bundle.js ; do
    mv -vi "$f" "${f/.*([^.])./.${generic_string}.}"
done

关键是替换${f/.*([^.]./.${generic_string}.}。模式/.*([^.])./.<some text>.的第一次出现匹配,其中<some text>不包括DOT([^.])(请参见MAN页面)。替换.${generic_string}.用您想要的任何通用字符串代替。除此之外,如果您有空间,则双号是!

编辑感谢F. Hauri-将-vi添加到mv中。-v =显示被重命名的内容; -i =提示(男人页面)。

最新更新