Search code examples
linuxshell

Linux: watch number of files in directory


I am trying to write a shell script that waits until the number of files in a specified directory ( say ~/fit/) has reached a predefined number. What I've got so far is:

limit = 10
while [ls ~/fit/ | wc -l -lt $limit]
do
  sleep 1
done

This says -lt is an invalid option to wc. I also tried

[$limit -gt ls ~/fit/ | wc -l]

but it didn't work either. Any help is greatly appreciated.


Solution

  • A solution that minimize the use of external processes, like ls, wc and true, and manage correctly the (unusual) case of filenames containing newlines:

    #!/bin/sh
    
    nmax=10
    
    while :; do
      n=0
      for f in ~/fit/*; do
        n=$((n+1))
      done
      [ $n -ge $nmax ] && break
      sleep 1
    done
    
    echo "Limit reached!"