首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大容量文件重命名

问大容量文件重命名
EN

Unix & Linux用户
提问于 2020-12-27 16:45:53
回答 2查看 291关注 0票数 0

我拥有大量文件的集合,文件名类似于:

代码语言:javascript
复制
myvideo.s01e01.episode.title.here.mp4
myvideo.s01e02.episode.title.here.mp4

我想对它们进行批量重命名,这样我就可以得到:

代码语言:javascript
复制
myvideo.s01e01.mp4
myvideo.s01e02.mp4
etc.

我使用的是macOS,但是这些文件位于一个网络共享上,所以它们也可以通过linux处理。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-12-27 16:58:21

使用zsh:

代码语言:javascript
复制
autoload zmv
zmv -n '(*.s<->e<->).*(.mp4)' '$1$2'

当你高兴的时候,去掉-n (试运行)。

票数 2
EN

Unix & Linux用户

发布于 2020-12-27 17:00:52

如果您能够访问perl-rename (在某些Linux发行版中称为rename,在其他版本中称为prename,在其他版本中称为perl-rename ),那么您可以这样做:

代码语言:javascript
复制
$ 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实现):

代码语言:javascript
复制
for f in *mp4; do 
    newName=$(sed -E 's/(([^.]*\.){2}).*\.([^.]*)$/\1\3/' <<<"$f"); 
    echo mv -- "$f" "$newName"; 
done

如果这看起来是对的,那么在没有echo的情况下再次运行。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/626325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档