使用 sed 重命名文件(重新排列文件名)

使用 sed 重命名文件(重新排列文件名)

我有一堆文件,名字如下

some_random_str1 - Lecture X of Y some_random_str2.mp4

我想将这些名称更改为

Lecture X of Y - some_random_str1 some_random_str2.mp4

名称中只有恒定的模式,其中Lecture X of YXY数字,并且不同名称中可能不同

对于使用 sed 或其他正则表达式工具的单行程序有什么想法吗?

答案1

使用您常用存储库中的rename(Debian/ubuntu) 或prename(RedHat/CentOS)(又名“Larry Wall 的 Perl 重命名”)命令:

rename -n 's/(.*) - (Lecture \d+ of \d+) (.*).mp4/$2 - $1 $3.mp4/' *.mp4
  • -n是“试运行”。删除或替换为-v以实际执行命令
  • 假设 X 和 Y 是数字
  • 表达式可以是 Perl 可以接受的任何内容
  • 表达式周围需要单引号来限制反斜杠的使用。

答案2

进入cd包含文件的文件夹。
然后运行(可能用不同的路径替换 ./,而不是上面的 cd)

查找./-type f | 同时读取 n ; 执行  
  nn="$(
    回声“$n”|
    sed -re 's/(.*) - ([0-9]+ 的讲座 [0-9]+) (.*).mp4/\2 - \1 \3.mp4/'
  )”;
  回声“mv'$n''$nn'”;
完毕

验证生成的命令看起来是否正确。

如果发现一切都很好;再次运行相同的操作,但| bash附加内容。

相关内容