Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ls not updating to reflect new files?

Tags:

file

linux

bash

ls

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++.
like image 414
vijrox Avatar asked Jul 12 '16 18:07

vijrox


People also ask

How do I list most recent files in Linux?

Here's a breakdown of this command: -type f: locates all files in the directory. “%t %p\n”: prints a new line for each file where %t is the file's last modification time and %p is the filename path.

What does the ls * s command do?

Type the ls -S (the S is uppercase) command to list files or directories and sort by size in descending order (biggest to smallest).

What is ls F command?

ls -F gives a full listing, indicating what type files are by putting a slash after directories and a star after executable files (programs you can run). ls -l gives a long listing of all files.


2 Answers

This sequence of events seems to reproduce the issue.

image

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.

like image 136
Stan Zhang Avatar answered Oct 13 '22 13:10

Stan Zhang


This will happen if your second directory gets deleted and recreated. Even if directory is deleted, but some process has it as current directory, file descriptor for it will remain open, and ls will show old content. Executing cd . will force to close descriptor for now non-existent directory and reopen it again, now showing new content.

like image 27
mvp Avatar answered Oct 13 '22 13:10

mvp