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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: 7z как проверить что файл распаковался верно в bash?  (Прочитано 1605 раз)

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

Оффлайн iaks

  • Автор темы
  • Участник
  • *
  • Сообщений: 217
    • Просмотр профиля
Всем доброго дня!

При распаковке файлов через скрипт bash надо проверить как это можно прописать?

Если просто запустить в консоли распаковкупо итогу пишет (непо точно) Еverything OK.
В общем, как проверить, что все ок и архив распакован нормально?
Lubuntu
Xubuntu

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6272
    • Просмотр профиля
клади в архив файл с контрольными суммами и проверяй по нему после распаковки целостность.

Оффлайн iaks

  • Автор темы
  • Участник
  • *
  • Сообщений: 217
    • Просмотр профиля
Думаю не получиться, так как архивы не я паковал.
Есть 3000+ архивов.
Их надо распаковать и если ок - удалить архив.
Распаковывать надо по одному и сразу удаоятт, так как на диске мало места и если оставить распакованные файлы и архивы - все не влезет.
Lubuntu
Xubuntu

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7832
    • Просмотр профиля
Цитировать
как проверить, что все ок и архив распакован нормально?
Проверить код завершения.

Оффлайн iaks

  • Автор темы
  • Участник
  • *
  • Сообщений: 217
    • Просмотр профиля
Если не трудно, можешь написать как это прописать в скрипте?
Lubuntu
Xubuntu

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
iaks, а что, отменили 7z t <archive name> ?
И правильно вопрос следовало задать так: как проверить или архивы не битые. Смысла в перегонке гигабайт данных так и не увидел.

Ну а если надо распаковать и если ОК - удалить, то примерно так:
Код: (bash) [Выделить]
#!/bin/bash
for i in $(find /path/to/dir/with/archives -type f -name '*.7z')
do
    7z e $i # тут можно еще поиграться с директориями назначения
    RES=$?
    if [ "$RES" = "0" ]
    then
        rm $i
    fi
done
« Последнее редактирование: 17 Января 2018, 11:34:34 от EvangelionDeath »
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн iaks

  • Автор темы
  • Участник
  • *
  • Сообщений: 217
    • Просмотр профиля
Спасибо, вечером попробую, отпишусь.


Пользователь добавил сообщение 17 Января 2018, 21:59:02:
for i in $(find /path/to/dir/with/archives -type f -name '*.7z')

Что-то надо добавить видимо.
Имена файлов содержат пробелы и в итоге в массив попадают не пути слов, а разделенные пробелами

вместо:
/путь/к/файлу 1
/путь/к/файлу 2

выдает
/путь/к/файлу
1
/путь/к/файлу
2

правильно я понимаю что необходимо добавить строку?
IFS=$'\n'




Пользователь добавил сообщение 18 Января 2018, 00:04:13:
Поправте если что не так.
Вроде работает

#!/bin/bash
path='/путь/кфайлу/Рабочий стол/TestArh'
# получаем масив с путями с файлами 7z
IFS=$'\n'
for i in $(find $path -type f -maxdepth 1 -name '*.7z')
do
# проверяем нормальный ли архив
7z t $i
RES=$?
if [ "$RES" = "0" ]
    then
#пытаемся распаковать
7z x $i -o$path
RES=$?
if [ "$RES" = "0" ]
then
rm $i
else echo $i' - не распакован' >> $path'/log'
fi
else echo $i' - не прошел проверку' >> $path'/log'
fi


# 7z x $i -o$path
done

EvangelionDeath - еще раз спасибо!

А ещё для себя заметка:
Гуглить exit codes
« Последнее редактирование: 18 Января 2018, 07:47:50 от iaks »
Lubuntu
Xubuntu

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
    7z e $i # тут можно еще поиграться с директориями назначения
    RES=$?
    if [ "$RES" = "0" ]
Код: (bash) [Выделить]
if 7z e "$i" ; then
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7670
  • We do what we must
    • Просмотр профиля
Код: (bash) [Выделить]
while read i; do
    7z e "$i" && rm "$i"
done <<< $(find /path/to/dir/with/archives -type f -name '*.7z')

Код: (bash) [Выделить]
find /path/to/dir/with/archives -type f -name '*.7z' -exec sh -c '7z e "{}" && rm "{}"' \;
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 18 Января 2018, 15:55:44 от ALiEN175 »
🖥 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

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
done <<< $(find /path/to/dir/with/archives -type f -name '*.7z')
Это что за комбинация? Может
Код: (bash) [Выделить]
done < <(find ...А второй вариант гут!
Ну или чтоб не морочить голову c find
Код: (bash) [Выделить]
shopt -s globstar
for a in /path/to/dir/with/archives/**.7z ; do
...
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7670
  • We do what we must
    • Просмотр профиля
Azure,
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 19 Января 2018, 01:25:18 от ALiEN175 »
🖥 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

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
ALiEN175, Что-то не так в королевстве датском:$ cat < <(echo "triple bracets are ok!")
triple bracets are ok!
P.S. "<" is less-than symbol not bracket
« Последнее редактирование: 19 Января 2018, 12:15:36 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7670
  • We do what we must
    • Просмотр профиля
Azure, зависит от шелла (я всегда в sh проверяю)
А так - да, в bash и zsh работает.
🖥 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

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Ну и Ваше
triple bracets
в sh тоже не работает$ cat <<< $(echo "triple bracets are ok!")
sh: 1: Syntax error: redirection unexpected
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7670
  • We do what we must
    • Просмотр профиля
Azure, упс, мой sh всё-таки bash
Цитировать
ls -l $(which sh) 
lrwxrwxrwx 1 root root 4 фев 14  2017 /usr/bin/sh -> bash
🖥 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

 

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