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

3
我有一个关于 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个回答

7

mv命令只有在给出多个源参数时才需要目标参数是一个目录。

在这种情况下,这可能是由于变量没有用引号括起来而导致的拆分。请像http://shellcheck.net/建议的那样,在所有扩展周围使用双引号。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接