linux - 使用 bash move 多个序列文件

标签 linux bash file move

我想将序列 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/

相关文章:

node.js - 错误 : spawn/data/craft/templates/node_modules/optipng-bin/vendor/optipng ENOENT

linux - 一次读取一个输入文件作为输入传递给 grep

linux - 无法在 Linux 上安装单声道

c - 如何在不使用循环的情况下调用 3 次 fork() 并创建 6 个进程

bash - 检查 bash 脚本中是否存在函数

java - 我应该在 Eclipse 项目中将纹理文件存储在哪里

swift - Swift 中最快的逐字符读取器是什么

java - 从 bash 进程、java 获取持续反馈

linux - 当我获取我的脚本时终端关闭(在开始时以点运行)

file - 如何在IntelliJ IDEA中设置默认系统文件编码