我没有更新以反映新文件?

时间:2016-07-12 18:22:40

标签: linux bash file ls

我正在运行一个在某个目录中创建一堆文件的程序,我希望看到这些文件被创建。

我打开两个终端窗口并将其中一个(称为终端A)​​发送到程序目录(这样我可以运行它),另一个(终端B)到输出文件写入的目录(这个输出目录开始为空)。当我在终端A的输出目录中touch,然后在终端B中ls时,出现新文件 - 所有这些都表现正常。

但是,在终端A中运行程序后,当我在终端B中ls时,没有新文件出现。奇怪的是,如果我cd . 那么 ls,新文件现在已列出。

造成这种行为的原因是什么,我可以绕过它吗?

编辑:有关编写文件的信息。

  • 有些是通过使用OpenCV在Python 2中调用cv2.imwrite(...)来编写的。
  • 有些是由ofstream在C ++中编写的。

2 个答案:

答案 0 :(得分:4)

这一系列事件似乎重现了这个问题。

image

终端A中的程序可能会删除终端B的当前目录,然后使用相同的名称重新创建它,因此ls不起作用,因为终端cd所指的特定目录B不再存在。但是,cd .会将您带到(现在)重新创建的目录,此时ls会再次运行。

答案 1 :(得分:2)

如果您的第二个目录被删除并重新创建,则会发生这种情况。 即使目录被删除,但某些进程将其作为当前目录,它的文件描述符仍将保持打开状态,ls将显示旧内容。 执行cd .将强制关闭现在不存在的目录的描述符并再次重新打开它,现在显示新内容。