使用名称模式 *.[a-z0-9].bundle.* 重命名所有文件,以用给定字符串替换 [a-z0-9]
Rename all files with the name pattern *.[a-z0-9].bundle.*, to replace the [a-z0-9] with a given string
在使用 Angular 2 CLI 构建应用程序时,我得到了命名的输出,例如:
inline.d41d8cd.bundle.js
main.6d2e2e89.bundle.js
等等
我想要做的是创建一个 bash 脚本来重命名文件,用一些给定的通用字符串替换前两个 .
之间的数字。尝试了一些东西,包括 sed,但我无法让它们工作。任何人都可以建议一个 bash 脚本来让它工作吗?
纯bash选项:
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>
不包含点 ([^.]
)(请参阅 man page)。替换 .${generic_string}.
将其替换为您想要的任何通用字符串。除此之外,如果您有空格,请使用双引号!
编辑 感谢 F. Hauri - 添加 -vi
到 mv
。 -v
= 显示重命名的内容; -i
= 覆盖前提示 (man page)。
在纯 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
在使用 Angular 2 CLI 构建应用程序时,我得到了命名的输出,例如:
inline.d41d8cd.bundle.js
main.6d2e2e89.bundle.js
等等
我想要做的是创建一个 bash 脚本来重命名文件,用一些给定的通用字符串替换前两个 .
之间的数字。尝试了一些东西,包括 sed,但我无法让它们工作。任何人都可以建议一个 bash 脚本来让它工作吗?
纯bash选项:
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>
不包含点 ([^.]
)(请参阅 man page)。替换 .${generic_string}.
将其替换为您想要的任何通用字符串。除此之外,如果您有空格,请使用双引号!
编辑 感谢 F. Hauri - 添加 -vi
到 mv
。 -v
= 显示重命名的内容; -i
= 覆盖前提示 (man page)。
在纯 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