8

用 zmv 批量重命名文件

 2 years ago
source link: https://lenciel.com/2022/10/renaming-with-zmv/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我看电影主要靠下载1

这些年,好的电影网站越来越少:因为版权管得严了,似乎没啥好抱怨的。

还在经营的,很多都会在压片子的时候,加点儿自己的广告,顺道改改文件名:都要吃饭嘛,似乎也没啥好抱怨的。

但我每次要去看电影的时候,无论电脑还是投影仪,就经常陷入下图所示的「我究竟下了些什么」的迷茫中:

Don't touch me...

因为我用 zsh,所以就拿它自带的 zmv 来解决这个问题。

加载zmv

首先你需要加载这个命令:

$ which zmv
zmv not found
$ autoload -Uz zmv
$ which zmv
zmv () {
        # undefined
        builtin autoload -X
}

这里的 undefined 看起来可能有点吓人,但其实在 zsh 的 autoloading functions 里这是很常见的 annotation。

如果你想让它常驻可以:

$ vi $HOME/.zshenv
autoload zmv

zmv 的基础语法是:

zmv 'input_pattern' 'output_pattern'

举个例子,处理照片的时候我们经常要遍历整个目录和子目录,把所有的 JPEG 后缀的文件改成 jpeg。用 zmv 你只需要2

$ zmv -n -W '**/*.JPEG' '**/*.jpeg'

而如果是生写 bash 你大概需要:

$ for file in **/*.JPEG; do mv $file ${file/.JPEG/.jpeg}; done; 

pattern/group

要解决我遇到的问题,当然可以使用粗暴点儿的办法,比如去掉开头的 8 个字符:

$ zmv -n '*' '$f[9,-1]'

但实际上,zmv 真正强大在于它支持匹配和分组:需要注意的是,虽然声明 group 也是用括号,但它用的不是正则而是glob

比如你想去掉文件里面所有的[]起来的前缀,可以写成:

$ zmv -n '\[*\](*).(mkv|mp4)' '$1.$2'

mv -- '[电影天堂www.dytt89.com]灰影人-2022_蓝光中英双字.mp4' 灰影人-2022_蓝光中英双字.mp4
mv -- '[电影天堂www.dytt89.com]狩猎-2022_BD韩语中字.mp4' 狩猎-2022_BD韩语中字.mp4

这里的意思是,用[]扩起来的任何字符后面跟的如果是.mkv或者.mp4后缀,则把文件名作为第一个分组,把后缀作为第二个分组,用 $1.$2 引用这两个分组来生成修改后的文件名。

更多 zmv 的用法可以看它的文档

  1. 一个 raspberry pi 挂载个 NFS 的硬盘,上面再跑个 transmission,把管理页面暴露到指定的端口。这样给它种子或者磁力链,它自己下载了,家里的电脑和投影仪都可以访问。 

  2. 这里的 -n 参数是 dry-run 的意思,通常情况下你应该先用这个参数看看它会把名字改成什么样,再真正运行命令。 


Recommend

  • 31

  • 9
    • developer.51cto.com 4 years ago
    • Cache

    移动并重命名2000个文件,Python,3秒

    大家好,又到了Python办公自动化(偷懒)专题。 今天介绍的案例是如何利用Python来自动化移动、修改、重命名文件/夹,这样的操作在日常办公中经常会用到,若能掌握用Python实现将会大大提高效率! 所以我希望能够通过这篇文章来让大家了解...

  • 6
    • www.chenwenguan.com 4 years ago
    • Cache

    Python批量重命名压缩文件

    Python批量重命名压缩文件 2021年1月19日 | 最近更新于 下午7:35工作上遇到一个问题,QA提供的1000多个压缩文件名称命名不规范,服务器做C++覆盖率产物解析,压缩文件文件名必须和解压之后的文件名一致,所以只是修改压缩文件名称行不通,...

  • 4
    • www.lujun9972.win 3 years ago
    • Cache

    使用rename批量重命名文件

    使用rename批量重命名文件 在linux上我们一般用 mv 命令来对文件进行重命名操作,但是 mv 一次只能对一个文件进行重命名,对批量文件进行重命名就比较麻烦了。 一直以来我都是写一段shell循环或者跟 xargs...

  • 9

    V2EX  ›  Linux 如何理解 mv 重命名改变了文件的 ctime?   lolcat · 2 小时 26 分钟前 · 338 次点...

  • 9
    • www.isaced.com 3 years ago
    • Cache

    WordPress上传文件自动重命名

    WordPress上传文件自动重命名 WordPress上传文件默认是不改变文件名称的,可对中文文件名而言,某些系统、某些浏览器访问是会出现问题滴,那么怎样让Wordpress上传文件自动重命名呐? 以wordpress 3.5.1 为例,打开“wp-admin/includes...

  • 3
    • www.myfreax.com 2 years ago
    • Cache

    如何在Linu中重命名文件和目录

    linux 如何在Linu中重命名文件和目录 重命名文件和目录是您经常需要在Linux系统上执行的最基本任务之一。重命名单个文件很简单,但一次重命名多个文件可能是一个...

  • 2

    Moving files in ZSH - The wonderful world of zmvPosted on November 12, 2019Latest Update: September 04, 2020From time to time I find myself trying to move a batch of files that have a si...

  • 3

    V2EX  ›  分享创造 golang 做了一个批量重命名桌面软件  

  • 5

    HeoGPT生成中...我们习惯使用command+R来修改图层和画板的名称,在上古时期我们想要批量重命名图层还需要使用插件才能完成这个工作,例如我们常见的插件Rename It

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK