我想获取一组名为123456_1_2.mpg的文件并将其转换为123456.mpg如何使用终端命令执行此操作?
rename 's/_.*/.mpg/' *mpg
这将删除所有以mpg结尾的文件的第一个下划线和mpg文件扩展名之间的所有内容
要循环遍历所有可用文件,可以在for
形式的文件名上使用??????_?_?.mpg
循环。
要重命名文件,您可以使用${MYVAR%%pattern}
从字符串的开头保留模式的最短匹配,而无需使用任何外部命令。
这就是说,你的代码看起来像:
#!/bin/bash
shopt -s nullglob # do nothing if no matches found
for file in ??????_?_?.mpg; do
[[ -f $file ]] || continue # skip if not a regular file
new_file="${file%%_*}.mpg" # compose the new file name
echo mv "$file" "$new_file" # remove echo after testing
done
我们可以使用grep
去除除第一个数字序列之外的所有内容。 --interactive
旗帜将询问您是否确定每次移动,因此您可以确保它没有做任何您不期望的事情。
for file in *.mpg; do
mv --interactive "$file" "$(grep -o '^[0-9]\+' <<< "$file")".mpg
done
正则表达式^[0-9]\+
转换为“以数字开头且后跟零个或多个数字的任何字符序列”。