0

我有一个 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.

如果有人知道更清洁的方法,请随时回答。谢谢大家的回答。

4

2 回答 2

1

出于调试目的,不要在脚本末尾添加sleep后跟,而是添加:mv

pwd
ls -la .

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

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

于 2013-03-27T23:59:20.497 回答
0

不留下垃圾是一种常见的做法,这是您的程序创建的

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

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

但无论哪种情况,您都需要浏览脚本以查找 rm 、 mv 或 cd 命令。

应该这样做。

于 2013-03-28T01:52:37.950 回答