我对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.
答案 0 :(得分:6)
mv
才要求目标为目录。
在这种情况下,这可能是由于缺少引用而导致变量被拆分造成的。使用双引号 - http://shellcheck.net/指示 - 围绕所有扩展。
for i in *.txt ; do
mv "$i" "$NEWDIR/$NEWF"
done
请注意,只有迭代的最后一个文件实际上会留下给定的名称 - 其余文件将被其后继者覆盖。