在Shell脚本中移动生成的文件

时间:2013-03-27 17:43:58

标签: shell unix

我有一个shell脚本,可以调用生成一些文件的其他脚本。在我的shell脚本结束时,我想将生成的所有文件(它们具有相同的前缀)移动到一个文件夹中。

但是,出于某种原因,如果我在脚本末尾有mv调用,我收到此错误,就像文件系统仍然不知道我认为的文件。

mv: cannot stat `foo_*': No such file or directory

我的第一次尝试"解决"这是为了引入sleep几秒钟的调用来帮助我避免这个问题,但是,即使值非常高并且我确定文件已经创建,我也遇到了同样的错误。

然后我尝试像这样运行我的脚本:

sh myscript.sh ; mv foo_* bar

并且它没有问题。

知道为什么会发生这种情况以及如何避免使用两个脚本或双线命令来达到预期效果?

感谢。

编辑:我正在为可能从谷歌来到这里并遇到类似问题的人写这封信。

基本上,我正在生成mv命令,如下所示:

mv $preffix"_*" $destination

由于某种原因,这不能正常工作。刚刚创建了一个像这样的临时变量:

MV_CMD=$preffix"_*" $destination

然后就这样调用它:

mv $MV_CMD

如果有人知道更干净的方式,请随时回答。谢谢大家的回答。

2 个答案:

答案 0 :(得分:1)

出于调试目的,添加:

,而不是将sleep后跟mv附加到脚本的末尾。
pwd
ls -la .

这会将当前目录及其所有内容打印到控制台。

此外,在启用调试的情况下执行脚本:sh -x ./myscript.sh以查看执行的所有命令,以便更好地了解原因可能是什么,以及创建的文件是什么,以及在哪个目录中

答案 1 :(得分:0)

通常的做法是不留下垃圾,你的编程会创建

检查其他shell是否有rm命令.......他们可能有删除或删除创建的中间文件的说明。

您还应检查特定的目录更改,这些文件可能已在其他某些位置创建或移动到某处。

但在任何一种情况下,您都需要浏览脚本以查找rm,mv或cd命令。

应该这样做。