我拥有大量文件的集合,文件名类似于:
myvideo.s01e01.episode.title.here.mp4
myvideo.s01e02.episode.title.here.mp4我想对它们进行批量重命名,这样我就可以得到:
myvideo.s01e01.mp4
myvideo.s01e02.mp4
etc.我使用的是macOS,但是这些文件位于一个网络共享上,所以它们也可以通过linux处理。
发布于 2020-12-27 16:58:21
使用zsh:
autoload zmv
zmv -n '(*.s<->e<->).*(.mp4)' '$1$2'当你高兴的时候,去掉-n (试运行)。
发布于 2020-12-27 17:00:52
如果您能够访问perl-rename (在某些Linux发行版中称为rename,在其他版本中称为prename,在其他版本中称为perl-rename ),那么您可以这样做:
$ rename -n 's/(.+?\..+?\.).*\.(.*)/$1$2/s' *mp4
myvideo.s01e01.episode.title.here.mp4 -> myvideo.s01e01.mp4
myvideo.s01e02.episode.title.here.mp4 -> myvideo.s01e02.mp4这将只打印命令将做什么,而不实际重命名任何东西。如果输出是您所期望的,那么在不使用-n的情况下运行命令来实际重命名文件。
如果您没有perl-rename,而且文件名不包含换行符,并且所有字节都在用户的区域设置中构成有效字符,那么您也可以直接在shell中执行它(假设zsh-like shell和与BSD兼容的sed实现):
for f in *mp4; do
newName=$(sed -E 's/(([^.]*\.){2}).*\.([^.]*)$/\1\3/' <<<"$f");
echo mv -- "$f" "$newName";
done如果这看起来是对的,那么在没有echo的情况下再次运行。
https://unix.stackexchange.com/questions/626325
复制相似问题