Как извлечь один или несколько файлов папок из нескольких архивов?

Для экономии нашего рабочего времени автоматизируем процесс работы с несколькими архивами.
ВАРИАНТ 1 РАСПАКОВКА ФАЙЛОВ И ПАПОК БЕЗ УДАЛЕНИЯ АРХИВА КОТОРЫЙ РАСПАКОВЫВАЕМ
Создайте фаил в программе Kwrite c именем exrtfile.sh и добавьте в его содержание следующий код:

#!/bin/bash

# Если аргумент не передан, используем текущую директорию
START_DIR="${1:-.}"

# Проверяем, что стартовая директория существует и является директорией
if [ ! -d "$START_DIR" ]; then
echo "Ошибка: директория '$START_DIR' не существует или не является
директорией."
exit 1
fi

# Используем find, чтобы рекурсивно найти все .zip-файлы
find "$START_DIR" -type f -iname '*.zip' | while read -r archive; do
# Извлекаем имя архива (без пути)
archive_name=$(basename "$archive")
archive_dir="${archive%.*}" # Часть после последнего точки (имя
без расширения)

# Создаём целевую папку
mkdir -p "$archive_dir"

# Распаковываем в созданную папку
unzip -d "$archive_dir" "$archive"

# Проверяем код завершения unzip (0 — успех)
if [ $? -eq 0 ]; then
echo "Успешно распакован: $archive"
# Удаляем исходный архив
rm -- "$archive"
else
echo "Ошибка при распаковке: $archive. Файл может быть
повреждён."
fi
done
---------------------------------------------------------------------------------------------------------------------------------------------
Воспользуйтесь терминалом вызовите его сочетанием клавиш Ctrl+Alt+T введите su нажмите Enter введите пароль Администратора и просто перекиньте этот фаил в терминал из окна рабочего стола или проводника смотря где вы его создавали.

Примечание !!!!!!!!
Фаил может не сработать если не стоит в свойствах файла галочка Является выполняемым и не стоят права на просмотр и изменение.

Ниже вы можете скачать мой фаил формата txt* после скачивания вам необходимо переименовать фаил с расширения .txt на .sh

Как извлечь один или несколько файлов папок из нескольких архивов из вложенных папок

Для экономии нашего рабочего времени автоматизируем процесс работы с несколькими архивами.
ВАРИАНТ 2 РАСПАКОВКА ФАЙЛОВ И ПАПОК ИЗ ПАПОК 1 2 3 4 5 6 ИЗ АРХИВОВ ZIP С ПЕРЕУПАКОВКОЙ В АРХИВ TAR.GZ И ПОЛСЕДУЮЩИМ УДАЛЕНИЕМ АРХИВА ПОСЛЕ РАСПАКОВКИ
Создайте фаил в программе Kwrite c именем exrtfile.sh и добавьте в его содержание следующий код:

#!/bin/bash
set -euo pipefail

# Папки, в которых ищем архивы
folders=(1 2 3 4 5 6)

for folder in "${folders[@]}"; do
# Проверяем, существует ли папка
if [ ! -d "$folder" ]; then
echo "Папка $folder не найдена, пропускаем."
continue
fi

echo "Обрабатываем папку: $folder"

# --- ЭТАП 1: ZIP → временная папка → tar.gz → удаление ZIP ---
shopt -s nullglob
for zip_file in "$folder"/*.zip; do
if [ ! -f "$zip_file" ]; then
continue
fi

base_name="${zip_file%.zip}"
# Имя tar.gz: папка/имя_без_zip.tar.gz
tar_file="${base_name}.tar.gz"

echo "Обрабатываю ZIP: $zip_file → $tar_file"

# Создаём временную папку
temp_dir="$(mktemp -d)" || { echo "ERROR: не удалось создать временную папку" >&2; continue; }

# Распаковываем ZIP во временную папку
if ! unzip -q -o -d "$temp_dir" "$zip_file"; then
echo "ERROR: не удалось распаковать $zip_file (архив не удалён)" >&2
rm -rf "$temp_dir"
continue
fi

# Упаковываем содержимое временной папки в tar.gz в той же директории, что и исходный ZIP
if tar -czf "$tar_file" -C "$temp_dir" .; then
echo "OK: создан $tar_file"
# Удаляем исходный ZIP
rm "$zip_file"
echo "OK: удалён $zip_file"
else
echo "ERROR: не удалось создать $tar_file (ZIP не удалён)" >&2
rm -rf "$temp_dir"
continue
fi

# Чистим временную папку
rm -rf "$temp_dir"
done
shopt -u nullglob

# --- ЭТАП 2: Распаковка всех tar.gz (включая только что созданные) и удаление архивов ---
shopt -s nullglob
for tar_file in "$folder"/*.tar.gz "$folder"/*.tgz "$folder"/*.tar; do
# Нормализуем имя: если это .tar без gzip, используем tar без -z
if [[ "$tar_file" == *.tar.gz || "$tar_file" == *.tgz ]]; then
extract_opts="-xzf"
else
extract_opts="-xf"
fi

if [ ! -f "$tar_file" ]; then
continue
fi

echo "Распаковываю: $tar_file"
if tar $extract_opts "$tar_file" -C "$folder"; then
echo "OK: распакован $tar_file"
# Удаляем архив после успешной распаковки
rm "$tar_file"
echo "OK: удалён $tar_file"
else
echo "ERROR: не удалось распаковать $tar_file" >&2
fi
done
shopt -u nullglob
done

echo "Готово!"

---------------------------------------------------------------------------------------------------------------------------------------------
Воспользуйтесь терминалом вызовите его сочетанием клавиш Ctrl+Alt+T введите su нажмите Enter введите пароль Администратора и просто перекиньте этот фаил в терминал из окна рабочего стола или проводника смотря где вы его создавали.

Примечание !!!!!!!!
Фаил может не сработать если не стоит в свойствах файла галочка Является выполняемым и не стоят права на просмотр и изменение.

Ниже вы можете скачать мой фаил формата txt* после скачивания вам необходимо переименовать фаил с расширения .txt на .sh