我看电影主要靠下载1。
这些年,好的电影网站越来越少:因为版权管得严了,似乎没啥好抱怨的。
还在经营的,很多都会在压片子的时候,加点儿自己的广告,顺道改改文件名:都要吃饭嘛,似乎也没啥好抱怨的。
但我每次要去看电影的时候,无论电脑还是投影仪,就经常陷入下图所示的「我究竟下了些什么」的迷茫中:
因为我用 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 的用法可以看它的文档。