I have a process that creates many files in a known directory, and the only way to tell how far along it is is to type ls
manually. Is there a way to make the output of ls
update automatically as new files are created, similar to how tail -f
works? Because of their names, every new file appears at the end of the list, so I wouldn't have to worry about them appearing in the middle.
You can use command like:
watch ls
to loop execution of ls
command
If the listing is too long you can add -C
to ls
watch ls -C
Or you can create explicit loop with while
while [ 1 ]
do
clear
ls
sleep 60
done
-
1Marked this as the answer for being the closest to my intentions, with the added benefit of allowing for the multi-column output of ls. – David Scott Jan 11 at 7:54
-
1I turned this into a one-line terminal command to make it into an alias more easily:
while [ 1 ]; do clear; ls; sleep 60; done
– David Scott Jan 11 at 7:55 -
@DavidScott, sure, that's possible, feel free to tune the code according to your environment and requirements – Romeo Ninov Jan 11 at 7:57
-
2Since you want to watch a progress, something like
watch 'ls -ltr | tail'
may suit best. Note the quotes so that the shell does not interpret the|
. – rexkogitans Jan 11 at 14:06
You can use a script like this that monitor every changes and after any change it makes a ls sorted by date. To be able to execute it you would need inotify-tools installed. The script would be the following:
#!/bin/bash
DIRECTORY="your_directory_path"
inotifywait -m -r -e create --format '%w%f' "${DIRECTORY}" | while read NEW
do
ls -hltr
done
-
I like this answer because it doesn't "poll" and update every X seconds. Instead, it will trigger a refresh when there is a reason to refresh. Presumably, it will react more quickly than
sleep 60
will allow. – Christopher Schultz Jan 11 at 18:09
inotify
. – Kusalananda♦ Jan 11 at 7:25