我正在尝试实现与打字相同的效果
mv ./images/*.{pdf,eps,jpg,svg} ./images/junk/
在命令行中,从 bash 脚本中。我有:
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,eps,jpg,svg}'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
它在运行时给出了意想不到的错误:
mv: rename ./images/*.{pdf,eps,jpg,svg} to ./images/junk/*.{pdf,eps,jpg,svg}:
No such file or directory
引用所有这些内容的正确方法是什么,以便 mv
真正进行所需的扩展? (是的,有很多文件与 ./images/
中的模式匹配。)
最佳答案
删除的答案是正确的。对您的尝试稍作修改:
shopt -s extglob
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='@(pdf|eps|jpg|svg)'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
大括号扩展在变量扩展之前完成,但变量扩展在路径名扩展之前完成。因此,当原始变量被扩展时,大括号仍然是大括号,但是当变量包含路径名元素时,它们在路径名扩展完成时已经被扩展。
关于bash - 如何使 bash 扩展变量中的通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4691956/