vijrox vijrox - 4 months ago 12
Linux Question

ls not updating to reflect new files?

I am running a program that creates a bunch of files in a certain directory, and I want to watch the files get created.

I open two terminal windows and cd one of them (call it terminal A) to the directory of the program (so I can run it) and the other (terminal B) to the directory where the output files get written (this output directory starts out empty). When I

touch
a file in the output directory from terminal A then
ls
in terminal B, the new file appears -- all this behaves normally.

However, after I run the program in terminal A, none of the new files show up when I do
ls
in terminal B. Strangely enough, if I do
cd .
then
ls
in terminal B, the new files now get listed.

What is causing this behavior, and can I get around it?

Edit: Information about what is writing the files.


  • Some are being written by calls to
    cv2.imwrite(...)
    in Python 2, using OpenCV.

  • Some are being written by an
    ofstream
    in C++.


Answer

This sequence of events seems to reproduce the issue.

Your program in terminal A probably deletes terminal B's current directory and then recreates it with the same name, so ls doesn't work since that particular directory that was originally cd'd to by terminal B doesn't exist anymore. However, cd . brings you to the (now) re-created directory, at which point ls works again.