【问题标题】:ls not updating to reflect new files?不更新以反映新文件?
【发布时间】:2016-11-15 03:14:46
【问题描述】:

我正在运行一个在某个目录中创建一堆文件的程序,我想观察这些文件的创建过程。

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

但是,在终端 A 中运行程序后,当我在终端 B 中执行 ls 时,没有任何新文件出现。奇怪的是,如果我执行 cd . 然后 @987654327 @ 在终端 B 中,新文件现在被列出。

是什么导致了这种行为,我可以解决它吗?

编辑:关于正在写入文件的内容的信息。

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

【问题讨论】:

  • 您能否包含minimal reproducible example(您的代码)?我们只能猜测,没有确凿的事实。
  • 不幸的是,除了我正在运行的这个程序之外,我无法用其他任何东西重现这个错误,这是一个庞大且机密的代码集合。
  • 那么我们将无法重现这个bug,这是关闭的一个原因。你能至少列出脚本中使用的相关命令吗?
  • 谢谢 - 我会找到我能找到的并将其编辑到问题中
  • 会不会是这个的副本:superuser.com/questions/702402/….

标签: linux bash file ls


【解决方案1】:

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

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

【讨论】:

  • 看起来就是这样——谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2015-05-20
    • 2015-07-03
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多