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

时间:2017-04-16 03:37:23

标签: linux shell unix

我对mv命令有疑问。

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

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

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

for i in *.txt ; do
  mv $i $NEWDIR/$NEWF
done

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

mv: target 'newName' is not a directory.

1 个答案:

答案 0 :(得分:6)

只有在给出多个源参数时,

mv才要求目标为目录。

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

for i in *.txt ; do
  mv "$i" "$NEWDIR/$NEWF"
done

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