linux Конвертировать tar.gz в .ZIP архив -- команда терминала (для всех файлов в папке, bash)

Делаем так:

  1. Переходим в папку (лучше создать отдельную, чтобы ничего не удалилось) где лежит наш архив .tar.gz (или много таких архивов).
  2. Копипастим вот такую команду (копируем целиком и вставляем в терминал):
    for f in *.tar.gz;\
    do rm -rf ${f%.tar.gz} ;\
      mkdir ${f%.tar.gz} ;\
      tar -zxvf $f  -C ${f%.tar.gz}  ;\
      zip -r ${f%.tar.gz}.zip ${f%.tar.gz}  ;\
      rm -rf ${f%.tar.gz} ;\
    done

Как это работает

Как она работает (для каждого файла .tar.gz на уровне папки запуска -- bash скрипт, использующий цикл):

  1. на всякий случай удаляет папку (rm -rf ) с имененeм как у очередного архива .tar.gz, но без этого расширения (если такая папка вообще есть в этот момент -- например, если встретился файл test.tar.gz, то первым действием в цикле команда попытается удалить папку с имененм test -- это представляет опасность если у вас есть такая папка с чем-то ценным)
  2. Далее создаётся (mkdir) папка с тем же имененем, которое выше пытались удалить
  3. Затем распаковывем тар в эту папку
  4. Затем зипуем эту папку в файл с имененем как у тара, но расширением ZIP
  5. Затем удаляем временную папку, которую упоминали уже дважды
  6. Цикл (for) переходит к следующему файлу в папке (если таковой имеется)

Источник (пришлось его переработать): https://stackoverflow.com/questions/6301...

vedro-compota's picture

просто создаст пустые директории для каждого файла:

for f in *.tar.gz;\
do rm -rf ${f%.tar.gz} ;\
mkdir ${f%.tar.gz} ;\
done

_____________
матфак вгу и остальная классика =)