使用"mv"命令进行移动和重命名时,脚本将其视为目录而不是新文件名

Spe*_*sky 2 unix linux shell

我对这个mv命令有疑问.

为了移动和重命名文件,我mv file someDir/File2在终端中进行了操作,并将文件移动到someDir名为的新名称File2.

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

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

for i in *.txt ; do
  mv $i $NEWDIR/$NEWF
done
Run Code Online (Sandbox Code Playgroud)

我运行这个脚本,它说如下:

mv: target 'newName' is not a directory.
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 6

mv 仅在给出多个源参数时才要求目标为目录.

在这种情况下,这可能是由于缺少引用而导致变量被拆分造成的.使用双引号 - 如http://shellcheck.net/指示 - 围绕所有扩展.

for i in *.txt ; do
  mv "$i" "$NEWDIR/$NEWF"
done
Run Code Online (Sandbox Code Playgroud)

请注意,只有迭代的最后一个文件实际上会留下给定的名称 - 其余文件将被其后继者覆盖.