TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #825 13.2K
Админы делятся на три категории:
ㅤ
1. Те, кто не делает архивы,
2. Те, кто уже делает архивы,
3. Те, делает и уже проверяет.

🔤🔤🔥🔤🔤🔤🔤

Сейчас многие архиваторы и компрессоры умеют делать архивы в несколько потоков. А, проверяют, почему-то в один.

У меня на СХД валится куча разных архивов и их приходится проверять, чтобы ускорить процесс можно использовать gnu parallel. Мне так не удобно, потому что архивы шифрованные, причем пароли у них разные, удобнее проверять скриптом.

Вот тут Роман набросал рыбу, для использования многопоточности. Я немного упростил. (до 7 необходимыx строк)

#/bin/bash

declare -x PATH="/usr/local/bin:/usr/bin:/bin"
declare -i JOB_NUM=$(nproc)
declare DELAY=0.5
exec >&2
for i in {1..50};do # это цикл по всем заданиям
# это команда, выполняемая в фоне
( sleep $(($SRANDOM % 3 +1)); echo ${SECONDS}_sec ) &
while [[ $(jobs -r -p |wc -l) -ge $JOB_NUM ]];do
sleep $DELAY
echo $i
done
done
echo end loop
wait
echo TOTAL $SECONDS sec


Ну, и небольшая пояснялка:

nproc - число "ядер"

DELAY - задержка между проверками окончания выполнения фоновых заданий. Если задание выполняется долго (проверка архива) - можно смело ставить 10-30 секунд.

exec >&2 перенаправили весь вывод на stderr. В реалном скрипте можно убрать. (Как и все echo).

for - основной цикл по списку всех заданий.

sleep $(($SRANDOM % 3 +1)) - собственно фоновое задание. В данном случае пауза 1-3 сек.

echo ${SECONDS}_sec - ввел для примера, чтобы показать, что команд в фоновом задании может быть несколько.

while - как только запустили нужное число фоновых заданий, начинаем ждать окончания одного или нескольких.

echo end loop - как только основной цикл закончился - скрипт можно завершать (но некоторые задания еще могут долго работать).

wait - ожидать окончания всех фоновых заданий.

echo TOTAL $SECONDS sec - время полного выполнения скрипта.

На данный момент все задания завершены. Можно отправлять лог.

man nproc wc
help exec jobs wait


tags: #linux #bash
—
🔔 @bashdays➡️ @gitgate
More from @bashdays
  1. Sep 24, 2026Post #1565
  2. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  3. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  4. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  5. Sep 11, 2026🤖 DevOps в эпоху AI трансформации: что работает уже сейчас! 17 сентября Сбер собирает Dev…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →