LINUX.ORG.RU
ФорумAdmin

Подсчет файлов в каталоге


1

1

Доброе время суток не как не могу написать скрипт по подсчету файлов в папке (( /opt/123 в этой папке надо подсчитывать файлы и если изменилось количество файлов выполнить некое действие. Вот что смог сделать и то не правельно

#!/bin/sh
dat=`date +%H-%M...%d-%m-%Y`
rmm=/bin/rm
to=/bin/touch
lock=/var/lock/$i
po= ls -f /opt/123 | wc -l >/opt/1
$po
for i in $( cat /opt/1 )

do
echo $i

if [ $i -ne 2 ]
then
  if [ ! -f $i ]; then

        echo  ok > /dev/null

              $to  $i.txt
                  fi

          elif [ -f $i ]; then
        echo Kolichestvo $i

           $rmm -f *.txt
            fi
            done

Что я сделал не так?? Или совсем не то сделал ?? да и еще

ls -f /opt/123 | wc -l
Выдает 2 хотя папка 123 пустая


find /dir -maxdepth 1 -type f | wc -l

sdio ★★★★★
()

Выдает 2 хотя папка 123 пустая

. ..
sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
ls -lA /opt/123 | wc -l
find /opt/123 -maxdepth 1 -type f | wc -l

Нужно внимательней смотреть, что выводят отдельные части пайпа.

blexey ★★★★★
()
Ответ на: комментарий от blexey

Вопрос еще в том что скрипт будет выполнятся 1 в 5 мин (( Я просто хочу сделать так чтоб один раз в 5 мин выполнился скрипт сказал Koll $I и последующие запуски ,если число не изменилось или 0 файлов то просто ок в /dev/null А если изменились количество файлов отличное от 0 выдавал koll $i как то так

Не как не могу добиться

 cat 2.sh
#!/bin/sh
dat=`date +%H-%M...%d-%m-%Y`
rmm=/bin/rm
to=/bin/touch
find /opt/123 -maxdepth 1 -type f | wc -l >/opt/1

for i in $( cat /opt/1 )

do

if [ $i -ne 0 ]
then
  if [ ! -f $i ]; then

        echo  ok
              $to  $i.txt
                  fi

          elif [ -f $i.txt ]; then
        echo koll $i

           $rmm -f *.txt
            fi
            done

avolon
() автор топика

ты про find . -type f | wc -l?

Eddy_Em ☆☆☆☆☆
()

Сам ты пустой.
2 объекта ФС:
.
..

/tmp/2fs$ ls -la
итого 8
drwxr-xr-x  2 nnnn  nnnn 4096 Фев  5 12:49 .
drwxrwxrwt 16 root  root  4096 Фев  5 12:49 ..
Deleted
()
Последнее исправление: RTP (всего исправлений: 1)
Ответ на: комментарий от anonymous

А я помню что оно там выдает?

оказывается дофигища... так что читать ман надобно

вооонн аж 8 штук нашло.

Deleted
()
Последнее исправление: RTP (всего исправлений: 1)
Ответ на: комментарий от blexey

Вот так сделал поидее должен работать но нехотит


#!/bin/sh
dat=`date +%H-%M...%d-%m-%Y`
rmm=/bin/rm
to=/bin/touch
for i in $(find /opt/123 -maxdepth 1 -type f | wc -l )

do
echo $i > /dev/null 2>&1

if [ $? -ne 0 ]

    then
        if [ ! -f $i ]; then

        echo  koll $i

              $to  $i
                  fi
          elif [ -f $i ]; then

        echo ok

          $rmm -f  $i


            fi
            done

Подскажите где я не прав??

avolon
() автор топика
Ответ на: комментарий от avolon

for i in $(find /opt/123 -maxdepth 1 -type f | wc -l )

Вай, полегче :) wc -l возвращает одно число, к которому цикл for in применять не нужно.

#!/bin/bash
N=`find /opt/123 -maxdepth 1 -type f | wc -l`
if [ $N -gt 0 ] ; then
  echo "nonzero case"
else
  echo "zero case"
fi
blexey ★★★★★
()
Последнее исправление: blexey (всего исправлений: 1)

Плюсую решение от sdio:

find /dir -maxdepth 1 -type f | wc -l

А вообще, задача выглядит странно. Возможно, тебе стоит посмотреть в сторону inotify-tools

selivan ★★★
()
Ответ на: комментарий от blexey

Все хорошо но загвоздка в том если скрипт будет выполнятся каждые 5 мин то он все время будет писать zero case или если есть файлы то nonzero case А хотелось один раз сказал что у вас zero case и только по появлению файлов в папке сказал nonzero case до след изменение количества файлов Как то так

avolon
() автор топика
Ответ на: комментарий от avolon

Все хорошо но загвоздка в том если скрипт будет выполнятся каждые 5 мин то он все время будет писать zero case или если есть файлы то nonzero case А хотелось один раз сказал что у вас zero case и только по появлению файлов в папке сказал nonzero case до след изменение количества файлов

Можно сохранять количество файлов в переменной (и зациклить скрипт с sleep 300) или в файл и читать из него кол-во файлов из предыдущего запуска. Только загвоздка в том, что может удалится один файл и появится новый. Количество не изменится. Может все же лучше попробовать icron.

for i in $(find /opt/123 -maxdepth 1 -type f | wc -l )

цикл исполняется один раз с i=<кол-во файлов>

if [ ! -f $i ]; then
выполнится если существует файл <кол-во файлов>, ну и т.д.

naszar
()
Последнее исправление: naszar (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.