在脚本中使用 globbing 进行 mv 大括号扩展
mv brace expansion with globbing in script
我正在尝试将照片移动到其他目录。当我从命令行(在 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
raws 和 *.NEF.xmp
sidecar 文件也存在,包括 2385、2386、 和 2387,所以这不是问题。
你只能像这个例子那样用 evil 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"
或许也将变量双引号。
我正在尝试将照片移动到其他目录。当我从命令行(在 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
raws 和 *.NEF.xmp
sidecar 文件也存在,包括 2385、2386、 和 2387,所以这不是问题。
你只能像这个例子那样用 evil 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"
或许也将变量双引号。