我有一个目录,其中包含名为“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
当输出看起来正确时删除。