Linux 当使用;mv";用于移动和重命名的命令,脚本将其视为目录而不是新文件名

Linux 当使用;mv";用于移动和重命名的命令,脚本将其视为目录而不是新文件名,linux,shell,unix,Linux,Shell,Unix,我有一个关于mv命令的问题 为了移动和重命名文件,我在终端中执行了mv file someDir/File2,它将文件移动到someDir,新名称为File2 但是,当我使用shell脚本执行此操作时,它会将File2部分视为一个目录,而不是文件的新名称 所以我有两个变量,NEWDir=NEWDir,NEWF=newName for i in *.txt ; do mv $i $NEWDIR/$NEWF done 我运行此脚本,它显示以下内容: mv: target 'newName' i

我有一个关于
mv
命令的问题

为了移动和重命名文件,我在终端中执行了
mv file someDir/File2
,它将文件移动到
someDir
,新名称为
File2

但是,当我使用shell脚本执行此操作时,它会将
File2
部分视为一个目录,而不是文件的新名称

所以我有两个变量,
NEWDir=NEWDir
NEWF=newName

for i in *.txt ; do
  mv $i $NEWDIR/$NEWF
done
我运行此脚本,它显示以下内容:

mv: target 'newName' is not a directory.

mv
仅当给定多个源参数时,才要求目标为目录

在这种情况下,这可能是由于缺少引用导致变量被拆分造成的。在所有展开式周围使用双引号(如指示)

for i in *.txt ; do
  mv "$i" "$NEWDIR/$NEWF"
done
请注意,只有最后一个迭代过的文件将实际保留给定名称——其余文件将被其后续文件覆盖