我一定是太愚钝了,因为即使在阅读了重命名手册和其他人在各个留言板上提供的大量示例脚本之后,我仍然无法开始理解重命名命令的语法实际上意味着什么。
我正在尝试学习 bash 命令,我意识到简单地从互联网上复制并运行命令而不真正理解它们的作用以及更重要的是为什么它们“这样做”是多么危险。所以,有人能帮我理解重命名命令的术语是什么意思吗,这样我就可以构建自己的有效且准确的命令?
具体来说,我已将 40 多个 YouTube 视频下载到同一目录中,它们都以-fgrhegrvbfv
(每个视频的 - 后都有完全随机的字符) 结尾。我只想删除每个文件名中的 - 和其后的 12 个字符。非常感谢!
答案1
第一个参数是 Perl 代码片段,它将 中的旧名称转换$_
为新名称,其余参数是要操作的文件。对于您的情况,您可以这样做:
rename 's/-.{12}$//' *
答案2
以下是一种方法:
$ ls
file2-fdsa file-asdf
$ prename -nv 's/(.*)-(.*)/$1/' *-*
file-asdf renamed as file
file2-fdsa renamed as file2
其工作原理是,我们有两组匹配的字符。因此,第一组(.*)
是前面的字符-
,第二组(.*)
是后面的字符。我们可以通过组 1 和组 2(未使用)-
引用它们。$1
$2
告诉*-*
shell 获取其中的所有文件-
,并将它们作为参数传递给rename
命令。这部分与其本身无关rename
,而是与 shell 有关。它只是让我们的生活更轻松一些。
现在,整个命令可以读作:“获取-
其中包含的所有文件,并将每个文件名分成两组,然后仅将该文件重命名为第一组中的内容”。
请注意以下几点:
- 该
-n
标志仅用于进行试运行。如果您要实际执行操作,请删除该标志。 - 该
-v
标志用于获取prename
实际正在执行的操作的详细输出 prename
与 相同rename
。Debian 软件包和维护的内容有点混乱。请参阅这了解更多信息。请注意,某些 shellksh
有自己的内置rename
命令,其工作方式与 perl 的重命名不同。