如何在linux中扩展名之前重命名多个文件?

时间:2017-12-21 17:47:16

标签: bash rename

我想获取一组名为123456_1_2.mpg的文件并将其转换为123456.mpg如何使用终端命令执行此操作?

3 个答案:

答案 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]\+转换为“以数字开头且后跟零个或多个数字的任何字符序列”。