批量重命名可变长度的长文件名

批量重命名可变长度的长文件名

我在一个目录中有一堆文件,我想将其重命名如下,例如现有名称:

1937 - Snow White and the Seven Dwarves.avi
1940 - Pinocchio.avi

目标名称:

Snow White and the Seven Dwarves (1937).avi
Pinocchio (1940).avi

干杯

答案1

如果您有基于 Perl 的rename(有时称为prename),这确实是可能的。如果您了解正则表达式,那就更简单了。

rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi

其作用是将源文件名分成三个部分。使用你的第一个例子,这些将是

  • 1937年
  • 白雪公主和七个小矮人
  • 视频

这些被分配到命令中的$1, $2, 。 (这些不是变量。)然后它以不同的顺序将它们重新组合在一起。$3renamebash

当您对建议的结果感到满意时,请将其更改为-n-v甚至完全删除它。

答案2

这就是我仅使用 bash 的方式

cd movie_directory
ls -1 | while read line
do
  year=$(echo ${line} | awk '{print $1}')
  name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1)
  ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2)
  newname=${name}" ("${year}")."${ext}
  mv "${line}" "${newname}"
done

假设:

文件名不包含.
年份之间的空格字符,-并且文件名实际上是空格,而不是空格tab或其他不可打印的字符。

相关内容