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

问题描述 投票:0回答:3

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

bash rename
3个回答
1
投票
rename 's/_.*/.mpg/' *mpg

这将删除所有以mpg结尾的文件的第一个下划线和mpg文件扩展名之间的所有内容


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

0
投票

我们可以使用grep去除除第一个数字序列之外的所有内容。 --interactive旗帜将询问您是否确定每次移动,因此您可以确保它没有做任何您不期望的事情。

for file in *.mpg; do
  mv --interactive "$file" "$(grep -o '^[0-9]\+' <<< "$file")".mpg
done

正则表达式^[0-9]\+转换为“以数字开头且后跟零个或多个数字的任何字符序列”。

© www.soinside.com 2019 - 2024. All rights reserved.