Linux 中批量重命名文件

Linux 中批量重命名文件

如何使用“重命名”命令将图像从“something_full.jpg”递归重命名为“something_500.jpg”?

答案1

基本上,你可以使用该rename工具来实现这一点。它应该有一个基于 Perl 的版本,带有基于 Debian 的 Linux 发行版,但你可以轻松地下载它从源代码也是如此(显然,您需要先使用 使其可执行chmod +x)。


以下命令将替换当前目录中所有 JPG 文件中的_full部分。_500

rename 's/_full/_500/' *.jpg

要以递归方式执行此操作,从当前目录开始,使用renamewith find

find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;

笔记:您可能希望在实际执行之前测试命令。为此,请将选项添加-nrename(例如在rename's//'字符串之间)。

答案2

您可能需要查看気圧.zmv 是 zsh 的特定功能,需要autoload -U zmv位于.zshrc文件的某个位置。

编辑:例如,OP 提出的任务可以通过以下方式解决

noglob zmv '(*)_full.(*)' '$1_500.$2'

手册页摘录zshcontrib

zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest

将与模式 srcpat 匹配的文件移动(通常是重命名)到具有 dest 给出格式的名称的相应文件,其中 srcpat 包含括号,这些括号将依次被 dest 中的 $1、$2、... 替换。例如,

zmv '(*).lis' '$1.txt'

重命名foo.lisfoo.txt、重命名my.old.stuff.lismy.old.stuff.txt等等。

该模式始终被视为 EXTENDED_GLOB 模式。任何名称未被替换更改的文件都将被忽略。任何错误(替换导致空字符串、两次替换给出相同结果、目标是现有常规文件且未给出 -f)都会导致整个函数中止而不执行任何操作。

EXTENDED_GLOB 模式非常强大。这里是有关这一概念的一个很好的入门读物。

相关内容