cp 多个文件在 bash 脚本中不起作用

cp 多个文件在 bash 脚本中不起作用

我想在 bash 脚本中运行以下命令,但是它不起作用。

命令:

cp /tmp/first/{abc.conf,xyz.conf} /tmp/backup/

bash脚本:

firstDir=/tmp/first
#secondDir=/tmp/second
validDir=$firstDir
#validDir=$secondDir
backupDir=/tmp/backup

files='{abc.conf,xyz.conf}'

join=$firstDir/$files
#join=$secondDir/$files

cp $join $backupDir
exit 0
rm -rf $validDir
mkdir $validDir

cp ("$backupDir/*.conf") $validDir

错误:

cp: cannot stat '/tmp/first/{abc.conf,xyz.conf}': No such file or directory

目标是清理目录,然后只放回这 2 个文件。

答案1

支撑扩张发生参数被扩展,所以

files='{abc.conf,xyz.conf}'
join=$firstDir/$files

结果实际上将变量设置为/tmp/first/{abc.conf,xyz.conf},并且在命令中扩展它时不会重新处理它cp

相反,你可以写

cp "$firstDir"/{abc.conf,xyz.conf} "$backupDir"

从字面上看,它将按照您想要的方式扩展。

无法强制变量发生大括号扩展,但您可以使用数组将文件名和命令分开,甚至使用大括号扩展来定义它:

files=( "$firstDir"/{abc.conf,xyz.conf} )

然后${files[@]}

相关内容