需要一个Bash shell脚本,通过从文件名中删除两个点之间包含的可变长度子字符串(包括第一个点)来重命名多个文件。第一个示例:初始文件名为“AAAAAAAA.BBBBB-BBB.jpg”,最终文件名为“AAAAAAAA.jpg”--删除子字符串“.BBBBB-BBB”。第二个示例:初始文件名为“mmmmmmmmmm.vvv-yyyy.txt”,最终文件名为“mmmmmmmm.txt”--删除子字符串“.vvv-yyyyy”。
我的脚本不断将文件扩展名追加到初始名称。我正在Windows Surface笔记本电脑上使用CYGWIN。
#!/bin/bash
for file in *.jpg *.txt; do
if [[ $file == *.*-*.* ]]; then
new_file=${file%%.*.*-*}.${file##*.}
mv "$file" "$new_file"
fi
done
4条答案
按热度按时间uajslkp61#
问题出在第一种模式上
尝试一个更简单版本的模式,以削减前缀部分
km0tfn4u2#
使用Perl的
rename
:删除
-n
开关,又名 * 试运行 * 当您的尝试是令人满意的重命名为真实的的。正则表达式匹配如下:
\.
[^-]+
-
(1次或多次(匹配最大可能量))-
[^-]+
-
(1次或多次(匹配最大可能量))(?=
\.
)
8fsztsew3#
li9yvcax4#
检查下面的代码。
从您的问题中提取的示例文件名。
AAAAAAAA.BBBBB-BBB.jpg
mmmmmmmmmm.vvv-yyyyy.txt
验证码:
输出: