Linux: смотреть количество файлов в каталоге - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь написать сценарий оболочки, который ожидает, пока число файлов в указанном каталоге (скажем, ~ / fit /) не достигнет заранее определенного числа. То, что у меня есть, так это:

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

Это говорит о том, что -lt является недопустимым параметром для wc. Я тоже пробовал

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

но это тоже не сработало. Любая помощь с благодарностью.

Ответы [ 4 ]

2 голосов
/ 21 октября 2010

Вам нужно:

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

Изменения:

  • Не должно быть пробелов вокруг = в limit=10
  • Должны быть пробелы вокруг[ и ]
  • Вам необходимо поместить команду, которая возвращает количество файлов (ls ~/fit/ | wc -l) в обратные галочки.
2 голосов
/ 21 октября 2010

Попробуйте:

limit=10
while [ `ls ~/fit/ | wc -l` -lt $limit ];
...
1 голос
/ 21 октября 2010

Решение, которое минимизирует использование внешних процессов, таких как ls, wc и true, и правильно управляет (необычным) случаем имен файлов, содержащих символы новой строки:

#!/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!"
1 голос
/ 21 октября 2010

Попробуйте это

while(true) do var=`ls -l ~/fit/ | wc -l` if [ $var -lt 10] then sleep 1 else break fi done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...