我想将序列 20 文件 move 到不同的文件夹中 所以我使用下面的代码来 move 文件但不起作用...
echo "Moving {$(( $j*20 -19))..$(( $j*20 ))}.png ------- > Folder $i"
mv {$(( $j*20 -19))..$(( $j*20 ))}.png $i;
所以我在终端得到输出
Moving {1..20}.png ------- > Folder 1
mv: cannot stat ‘{1..20}.png’: No such file or directory
但是已经有1.png到20.png的图片文件+文件夹... 那么如何 move 序列文件,如
{1..20}.png -> Folder 1
{21..40}.png -> Folder 2
谢谢!!!
最佳答案
我认为不可能像您所做的那样将大括号扩展与算术表达式结合起来。具体来说,像 {a..b}
这样的范围必须包含文字值,而不是变量。
我建议您改为使用 for
循环:
for ((n=j*20-19;n<=j*20;++n)); do mv "$n.png" "$i"; done
上述方法的缺点是 mv
被调用了很多次,而不是一次。按照建议in the comments (感谢 chepner ),您可以使用数组来减少调用次数:
files=()
for ((n=j*20-19;n<=j*20;++n)); do files+=( "$n.png" ); done
mv "${files[@]}" "$i"
"${files[@]}"
是数组的全部内容,因此所有文件都在对 mv
的一次调用中 move 。
关于linux - 使用 bash move 多个序列文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471145/