如何使用终端将具有连续名称的文件重命名为另一个序列?

如何使用终端将具有连续名称的文件重命名为另一个序列?

我有一个目录,其中包含名为“o1.ray”到“o293.ray”的文件。我想将它们移动到另一个目录,同时将它们重命名为“o132.ray”到“o424.ray”。

我如何在终端中执行此操作?

cd directory
for i in {1...293};
do cp o$i.ray subdirectory/o$i+131.ray;
done

我知道这是错误的,因为我得到:

error message 'cp: cannot stat 'o{1...293}.ray': No such file or directory 

答案1

正如 Kusalananda 所暗示的,这主要是语法的调整:

for index in {1..293}; do echo mv o"${index}".ray subdirectory/o"$((index+131))".ray; done

echo当输出看起来正确时删除。

或者,使用 zshzmv模块:

autoload zmv
zmv -n 'o(<->).ray' 'subdirectory/o$[$1 + 131].ray'

语法$[ ... ]执行算术运算;是用后面的$1括号捕获的。是一个 zsh 通配符,用于捕获数字范围;没有任何终点,它是开放式的;对于您的情况,您可以非常具体:<->o<->

zmv -n 'o(<1-293>).ray' 'subdirectory/o$[$1 + 131].ray'

-n当输出看起来正确时删除。

相关内容