Есть ли одна команда, которая позволяет извлечь my_dir в указанный каталог?
Да. Используйте e
опцию вместо x
:
7za e -y archive.7z -o/path/to/target_dir my_dir
( x
это экстракт с полными путями )
Команда e (Извлечь)
Извлекает файлы из архива в текущий каталог или в выходной каталог. Выходной каталог может быть указан ключом -o (Задать выходной каталог).
Эта команда копирует все извлеченные файлы в один каталог. Если вы хотите извлечь файлы с полными путями, вы должны использовать команду x (Извлечь с полными путями).
Команда Source e (Extract)
Но на самом деле папка в архиве содержит подпапки, которые я хотел бы сохранить
В этом случае вам нужно использовать исходную команду (с x
), а затем использовать move
для перемещения содержимого my_dir
на уровень выше.
Что-то вроде следующего командного файла (не проверено):
@echo off 7za x -y archive.7z -o/path/to/target_dir my_dir move /y my_dir\* /path/to/target_dir rd /s my_dir endlocal
Из командной строки:
7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir
Но я использую Linux!
Тогда команды для использования:
#!/bin/bash 7za x -y archive.7z -o/path/to/target_dir my_dir mv -f my_dir/* /path/to/target_dir rmdir my_dir
Или же:
7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir
Что, вероятно, может быть упрощено кем-то, кто знает bash
лучше меня.