Форум русскоязычного сообщества Ubuntu


Автор Тема: Обработать в скрипте batch результат unzip -t ...  (Прочитано 2968 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Aleks_Str

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Есть беда: из 400-800 файлов zip есть от одного до 15 (максимум, который встречал) "битых" файлов. Как только системнанатыкается на них - происходит останов процесса. И становится всем плохо :-(
В ручном режиме чистить так: в логах находишь имя "сбойнутого" файла, удаляешь его, перезапускаешь процесс, ждешь следующего. Долго и муторно.
Начал писать скрипт. Список файлов получил. Обрабатываю их в цикле.
Но вот затык! Как понять В СКРИПТЕ что файл битый?
#!/bin/bash
echo ===============================
for file in /home/ukm5/mint/exchange/items/in/mytest/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
REZULT=$(unzip -t $file)
REZ1=`echo ${REZULT} | awk '{print $1}'`
echo ++++++++
echo +   $? +
echo ++++++++
echo $REZ1
echo ===============================
echo
fi
done
Дает вот такой результат:
root@ubuntu:~/mint/exchange/items/in/myprg# ./ttt.sh
===============================

  error:  invalid compressed data to inflate
++++++++
+ 0 +
++++++++
Archive:
===============================

++++++++
+ 0 +
++++++++
Archive:
===============================


root@ubuntu:~/mint/exchange/items/in/myprg#
Как видим - по коду, возвращаемому unzip ничего не понятно - он равен 0.
А попытка выцепить первое слово - возвращает, почему то, строку :-(
Подскажите, а то я из-за недостаточного владения баше не вижу иного выхода?

Оффлайн Ser_W

  • Активист
  • *
  • Сообщений: 385
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #1 : 14 Сентября 2022, 16:32:50 »
Поробуйте не от рут'а запускать.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #2 : 14 Сентября 2022, 17:22:07 »
Как видим - по коду, возвращаемому unzip ничего не понятно - он равен 0.
Это не unzip возвращает, a echo

for FILE in /home/ukm5/mint/exchange/items/in/mytest/* ; do
[ -d "$FILE" ] && continue
  if unzip -t "$FILE" &> /dev/null ; then
    echo "Файл $FILE - ОК" ;         else
    echo "Файл $FILE - БИТЫЙ"
  fi
done
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Aleks_Str

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #3 : 14 Сентября 2022, 18:18:50 »
Разобрался.
Совсем тупым способом, конечно:
PodStrokaVseOk="No errors detected in compressed data"
А в цикле:
    elif [ -f "$file" ]
    then
      REZULT=$(unzip -t $file)
      if [[ "$REZULT" != *"$PodStrokaVseOk"* ]]; then
         echo "Kill " $file
         rm -rf $file
      fi
    fi

Теперь иная проблема:
через plink закидываю на оборудование этот скрипт, и он перестает выполняться. В конце строки появляется ^M (mcedit-ом смотрю).
Лапками удаляю - запускается.
Как понимаю - в винде и лине - разные окончания строк.
Вопрос: как правильно сохранить в notepad++ что бы он приходил в нужном формате?

Оффлайн Ser_W

  • Активист
  • *
  • Сообщений: 385
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #4 : 14 Сентября 2022, 18:21:46 »
> Вопрос: как правильно сохранить в notepad++ что бы он приходил в нужном формате?
Правильно -- не пользоваться Notepad++.

Оффлайн Aleks_Str

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #5 : 14 Сентября 2022, 18:38:01 »
Альтернатива?
ЦМД-ный файл перебирает айпишники, покладывает на него этот скрипт, запускает, а потом перезапускает службу.
echo copy script "script/clear_nounzip.sh" to %remote_dir% at %host%"
pscp -pw xxxxxx -r script/clear_nounzip.sh ukm5@%host%:%remote_dir%/clear_nounzip.sh
IF %ERRORLEVEL% NEQ 0 GOTO error

На лине - появляется файл, но, и появлюяются :M !
Где косячу?
При этом, если WinSCP закачиваю этот скрипт руками - все ок!
Значит, дело в команде копирования...

Оффлайн Ser_W

  • Активист
  • *
  • Сообщений: 385
    • Просмотр профиля

Оффлайн MooSE

  • Старожил
  • *
  • Сообщений: 1110
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #7 : 15 Сентября 2022, 00:21:37 »
А-а-а-а-а! Чувак.... Ну ё-маё... $? содержит код возврата предыдущей команды. Т.е. вот тут:

echo ++++++++
echo +   $? +
echo ++++++++

В $? содержится результат выполнения echo.

Если хотите таскать код возврата команды через весь скрипт - сохраните его в переменной. Примерно так:

REZULT=$(unzip -t $file)
RC="$?"
echo ++++++++
echo +   $RC +
echo ++++++++

Оффлайн Aleks_Str

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Обработать в скрипте batch результат unzip -t ...
« Ответ #8 : 15 Сентября 2022, 10:52:48 »
ААА! Точно! Посыпаю голову пеплом!

А про нотепад ++ все не просто, а очень просто!
Нижний правый угол, справа налево:
указатель режима (ins, ovr);
указатель кодировки (utf8 и тд);
И указатель конца строки. Там как раз и есть варианты Виндов, линукс, макинтошь

 

Страница сгенерирована за 0.044 секунд. Запросов: 22.