我想获取一组名为123456_1_2.mpg的文件并将其转换为123456.mpg如何使用终端命令执行此操作?
答案 0 :(得分:1)
要遍历所有可用文件,您可以使用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
答案 1 :(得分:1)
rename 's/_.*/.mpg/' *mpg
这将删除以mpg
结尾的所有文件的第一个下划线和mpg文件扩展名之间的所有内容答案 2 :(得分:0)
除了第一个数字序列外,我们可以使用grep
除去所有内容。 --interactive
标志会询问您是否确定每次移动,因此您可以确保它没有做任何您不期望的事情。
for file in *.mpg; do
mv --interactive "$file" "$(grep -o '^[0-9]\+' <<< "$file")".mpg
done
正则表达式^[0-9]\+
转换为“以数字开头且后跟零个或多个数字的任何字符序列”。