mv大括号扩展与脚本中的遍历

时间:2019-01-16 03:44:35

标签: bash brace-expansion

我正在尝试将照片移动到其他目录。当我从命令行(在bash和zsh中)运行mv时,效果很好:

mv './DSC_{2385..2387}.NEF*' ./new/STACK_2385-2387

我写了这个bash脚本,将一系列照片移动到另一个目录。

但是如果我从脚本运行它,则不会:

#/bin/bash
set -x
read START
read END
PREFIX="STACK"
DIRNAME=$PREFIX\_$START-$END
mkdir ./new/$DIRNAME
mv ./DSC_{$START..$END}.NEF* ./new/$DIRNAME

$./script.sh
mv ./DSC_{$START..$END}.NEF* ./new/$DIRNAME
+ mkdir ./new/STACK_2385-2387
+ mv './DSC_{2385..2387}.NEF*' ./new/STACK_2385-2387
mv: cannot stat './DSC_{2385..2387}.NEF*': No such file or directory

./new/STACK_2385-2387正在创建。也存在相关的*.NEF原始文件和*.NEF.xmp附属文件,包括2385、2386, 2387,因此这不是问题。

1 个答案:

答案 0 :(得分:1)

如本例所示,您只能使用邪恶的eval进行可变大括号扩展

$ a=1; b=10; eval echo {$a..$b}
1 2 3 4 5 6 7 8 9 10

因此您需要将mv命令更改为

$ eval mv ./DSC_{$START..$END}.NEF* ./new/"$DIRNAME"

也许也用双引号引起来。