помочь с сценарием оболочки для поиска и перемещения файлов в зависимости от условий - PullRequest
1 голос
/ 12 марта 2011

Нужна помощь с моим скриптом bash.Я пытаюсь написать этот сценарий оболочки, чтобы сделать следующее:

  1. найти файлы в каталоге с именем: server1-date.done server2-date.done server3-date.done ... server10-date.done

  2. печать в listA

  3. поиск файлов в каталоге (* .gz) и печать в listB
  4. , если listA имеет количество 10 (в основном найдено 10 .done файлов), затем переместите файлы в listB в новый каталог
  5. после перемещения файлов из listB, затем удалитестарый каталог с таким же именем (server1-date, server2-date, ...) и файлы .done.

Пока что у меня есть это в работе.Я не могу получить условие для работы секции if.Я не думаю, что я закодировал это правильно.Будем благодарны за любые предложения, улучшения и т. Д.Спасибо.

#Directories
GZDIR=/mydumps/mytest
FINALDIR=/mydumps/mytest/final
FLGDIR=/backup/mytest/flags
export GZDIR FINALDIR FLGDIR

#lists
FLGLIST="/mydumps/mytest/lists/userflgs.lst"
GZLIST="/mydumps/mytest/lists/gzfiles.lst"
export FLGLIST GZLIST

#Find files
find $FLGDIR -name \*.done -print > $FLGLIST
find $GZDIR -name \*.gz -print > $GZLIST

#Get need all (10) flags found before we do the move
FLG_VAL =`cat $FLGLIST | wc -l`
export $FLG_VAL

if [ "$FLG_VAL" = "10" ]; then
   for FILE in $GZLIST
       do
       echo "mv $GZLIST $FINALDIR" 2>&1
          for FLAG in $FLGLIST
             do
             echo "rmdir -f $FLAG" 2>&1
             done
       done
       else
           echo "Cannot move file" 2>&1
      exit 0
fi

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

Прежде всего, я действительно рекомендую, чтобы вы в качестве подхода по умолчанию всегда проверяли исключения и не включали "нормальный" случай в тест, если в этом нет необходимости.

...
FLG_VAL=`wc -l < $FLGLIST`              # no need for cat, and no space before '='
export $FLG_VAL

if [ "$FLG_VAL" != "10" ]; then
      echo "Cannot move file" 2>&1
      exit 0
fi

for FILE in $GZLIST
do
    echo "mv $GZLIST $FINALDIR" 2>&1
    for FLAG in $FLGLIST
    do
         echo "rmdir -f $FLAG" 2>&1
    done
done

Посмотрите, насколько проще читать код теперь, когда проверка ошибок извлечена и стоит сама по себе?

2 голосов
/ 12 марта 2011

Я не знаю, будет ли это работать, но это исправит все очевидные проблемы:

#!/bin/sh
#Directories
GZDIR=/mydumps/mytest
FINALDIR=/mydumps/mytest/final
FLGDIR=/backup/mytest/flags
export GZDIR FINALDIR FLGDIR

#lists
FLGLIST="/mydumps/mytest/lists/userflgs.lst"
GZLIST="/mydumps/mytest/lists/gzfiles.lst"

#Find files
find "$FLGDIR" -name '*.done' -print > "$FLGLIST"
find "$GZDIR" -name '*.gz' -print > "$GZLIST"

#Get need all (10) flags found before we do the move
FLG_VAL=$(wc -l <"$FLGLIST")  # Always prefer $( ... ) to backticks.

if [ "$FLG_VAL" -ge 10 ]; then
    for FILE in $(cat "$GZLIST")
        do
        echo "mv $FILE $FINALDIR" 2>&1
    done
    for FLAG in $(cat "$FLGLIST")
        do
        echo "rmdir -f $FLAG" 2>&1
    done
else
    echo "Cannot move file" 2>&1
    exit 0
fi
1 голос
/ 12 марта 2011
FLG_VAL =`cat $FLGLIST | wc -l`

Должно быть:

FLG_VAL=`cat $FLGLIST | wc -l`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...